#define DD_AM_LEXING_CHECK (PL_lex_state == LEX_NORMAL || PL_lex_state == LEX_INTERPNORMAL)
-#ifdef PL_parser
+#if defined(PL_parser) || defined(PERL_5_9_PLUS)
#define DD_HAVE_PARSER PL_parser
#define DD_HAVE_LEX_STUFF (PL_parser && PL_lex_stuff)
#define DD_AM_LEXING (PL_parser && DD_AM_LEXING_CHECK)
/* $declarators{$current_package_name} */
+ if (!HvNAME(PL_curstash))
+ return -1;
+
is_declarator_pack_ref = hv_fetch(is_declarator, HvNAME(PL_curstash),
strlen(HvNAME(PL_curstash)), FALSE);
}
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);