}
char* dd_get_linestr(pTHX) {
+ if (!DD_HAVE_PARSER) {
+ return NULL;
+ }
return SvPVX(PL_linestr);
}
void dd_set_linestr(pTHX_ char* new_value) {
int new_len = strlen(new_value);
- char* old_linestr = SvPVX(PL_linestr);
if (SvLEN(PL_linestr) < new_len) {
croak("forced to realloc PL_linestr for line %s, bailing out before we crash harder", SvPVX(PL_linestr));
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;
}
}
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;
}
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);
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);
STATIC OP *dd_ck_const(pTHX_ OP *o) {
int dd_flags;
- char* s;
char* name;
o = dd_old_ck_const(aTHX_ o); /* let the original do its job */