X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=Declare.xs;h=db84e259647c15b7de32ad788da678bb9862bee0;hb=hooks_endofscope;hp=3ad99ad2da6eb57485878ed952546a1231d1ab48;hpb=78678dfd92dd5cf8f08ba2479efcd8e2f673d622;p=p5sagit%2FDevel-Declare.git diff --git a/Declare.xs b/Declare.xs index 3ad99ad..db84e25 100644 --- a/Declare.xs +++ b/Declare.xs @@ -103,6 +103,9 @@ void dd_linestr_callback (pTHX_ char* type, char* name) { } char* dd_get_linestr(pTHX) { + if (!DD_HAVE_PARSER) { + return NULL; + } return SvPVX(PL_linestr); } @@ -126,7 +129,7 @@ char* dd_get_lex_stuff(pTHX) { return (DD_HAVE_LEX_STUFF ? SvPVX(PL_lex_stuff) : ""); } -char* dd_clear_lex_stuff(pTHX) { +void dd_clear_lex_stuff(pTHX) { if (DD_HAVE_PARSER) PL_lex_stuff = (SV*)NULL; } @@ -136,7 +139,11 @@ char* dd_get_curstash_name(pTHX) { } int dd_get_linestr_offset(pTHX) { - char* linestr = SvPVX(PL_linestr); + char* linestr; + if (!DD_HAVE_PARSER) { + return -1; + } + linestr = SvPVX(PL_linestr); return PL_bufptr - linestr; } @@ -187,12 +194,10 @@ STATIC OP *(*dd_old_ck_rv2cv)(pTHX_ OP *op); STATIC OP *dd_ck_rv2cv(pTHX_ OP *o) { OP* kid; int dd_flags; - char* cb_args[6]; o = dd_old_ck_rv2cv(aTHX_ o); /* let the original do its job */ if (in_declare) { - cb_args[0] = NULL; if (dd_debug) { printf("Deconstructing declare\n"); printf("PL_bufptr: %s\n", PL_bufptr); @@ -200,7 +205,19 @@ STATIC OP *dd_ck_rv2cv(pTHX_ OP *o) { printf("linestr: %s\n", SvPVX(PL_linestr)); printf("linestr len: %i\n", PL_bufend - SvPVX(PL_linestr)); } - call_argv("Devel::Declare::done_declare", G_VOID|G_DISCARD, cb_args); + + dSP; + + ENTER; + SAVETMPS; + + PUSHMARK(SP); + + call_pv("Devel::Declare::done_declare", G_VOID|G_DISCARD); + + FREETMPS; + LEAVE; + if (dd_debug) { printf("PL_bufptr: %s\n", PL_bufptr); printf("bufend at: %i\n", PL_bufend - PL_bufptr);