On Sun, Jan 26, 2003 at 03:37:00PM +0100, Rafael Garcia-Suarez wrote: > or e) use a version of PUSHSUB that doesn't look for flags in > PL_op->op_private in pp_dbstate. How about the following? -- The optimist believes that he lives in the best of all possible worlds. As does the pessimist. --- cop.h- Sun Jan 26 16:42:03 2003 +++ cop.h Sun Jan 26 16:53:09 2003 @@ -120,13 +120,23 @@ PAD *oldcomppad; }; -#define PUSHSUB(cx) \ +/* base for the next two macros. Don't use directly */ +#define PUSHSUB_BASE(cx) \ cx->blk_sub.cv = cv; \ cx->blk_sub.olddepth = CvDEPTH(cv); \ - cx->blk_sub.hasargs = hasargs; \ + cx->blk_sub.hasargs = hasargs; + +#define PUSHSUB(cx) \ + PUSHSUB_BASE(cx) \ cx->blk_sub.lval = PL_op->op_private & \ (OPpLVAL_INTRO|OPpENTERSUB_INARGS); +/* variant for use by OP_DBSTATE, where op_private holds hint bits */ +#define PUSHSUB_DB(cx) \ + PUSHSUB_BASE(cx) \ + cx->blk_sub.lval = 0; + + #define PUSHFORMAT(cx) \ cx->blk_sub.cv = cv; \ cx->blk_sub.gv = gv; \ --- pp_ctl.c- Sun Jan 26 16:47:59 2003 +++ pp_ctl.c Sun Jan 26 16:50:28 2003 @@ -1612,7 +1612,7 @@ PP(pp_dbstate) push_return(PL_op->op_next); PUSHBLOCK(cx, CXt_SUB, SP); - PUSHSUB(cx); + PUSHSUB_DB(cx); CvDEPTH(cv)++; (void)SvREFCNT_inc(cv); PAD_SET_CUR(CvPADLIST(cv),1);