sv_catpvs(gen, ")=@_;");
}
- /* fprintf(stderr, "! [%.*s]\n", (int)(PL_bufend - PL_bufptr), PL_bufptr); */
/* named sub */
if (saw_name) {
+ /* fprintf(stderr, "! [%.*s]\n", (int)(PL_bufend - PL_bufptr), PL_bufptr); */
lex_stuff_sv(gen, SvUTF8(gen));
*pop = parse_barestmt(0);
return KEYWORD_PLUGIN_STMT;
/* anon sub */
sv_catpvs(gen, "BEGIN{" MY_PKG "::_fini}");
+ /* fprintf(stderr, "!> [%.*s]\n", (int)(PL_bufend - PL_bufptr), PL_bufptr); */
lex_stuff_sv(gen, SvUTF8(gen));
*pop = parse_arithexpr(0);
s = PL_parser->bufptr;
croak("%s: internal error: expected '}', found '%c'", MY_PKG, *s);
}
lex_unstuff(s + 1);
+ /* fprintf(stderr, "!< [%.*s]\n", (int)(PL_bufend - PL_bufptr), PL_bufptr); */
return KEYWORD_PLUGIN_EXPR;
}
return ret;
}
+static int magic_free(pTHX_ SV *sv, MAGIC *mg) {
+ lex_stuff_pvn("}", 1, 0);
+ /* fprintf(stderr, "!~ [%.*s]\n", (int)(PL_bufend - PL_bufptr), PL_bufptr); */
+ return 0;
+}
+
+static int magic_nop(pTHX_ SV *sv, MAGIC *mg) {
+ return 0;
+}
+
+static MGVTBL my_vtbl = {
+ 0, /* get */
+ 0, /* set */
+ 0, /* len */
+ 0, /* clear */
+ magic_free, /* free */
+ 0, /* copy */
+ 0, /* dup */
+ magic_nop /* local */
+};
+
WARNINGS_RESET
MODULE = Function::Parameters PACKAGE = Function::Parameters
} WARNINGS_RESET
void
-xs_fini()
+_fini()
CODE:
- lex_stuff_pvn("}", 1, 0);
+ sv_magicext((SV *)GvHV(PL_hintgv), NULL, PERL_MAGIC_ext, &my_vtbl, NULL, 0);