diff options
-rw-r--r-- | cop.h | 16 | ||||
-rw-r--r-- | pp_ctl.c | 3 | ||||
-rw-r--r-- | pp_hot.c | 3 | ||||
-rw-r--r-- | pp_sort.c | 2 |
4 files changed, 11 insertions, 13 deletions
@@ -595,7 +595,7 @@ struct block_format { * The context frame holds a reference to the CV so that it can't be * freed while we're executing it */ -#define PUSHSUB_BASE(cx, cv, hasargs) \ +#define PUSHSUB_BASE(cx, cv, op, hasargs) \ ENTRY_PROBE(CvNAMED(cv) \ ? HEK_KEY(CvNAME_HEK(cv)) \ : GvENAME(CvGV(cv)), \ @@ -607,7 +607,7 @@ struct block_format { cx->blk_sub.olddepth = CvDEPTH(cv); \ cx->blk_sub.prevcomppad = PL_comppad; \ cx->cx_type |= (hasargs) ? CXp_HASARGS : 0; \ - cx->blk_sub.retop = NULL; \ + cx->blk_sub.retop = op; \ SvREFCNT_inc_simple_void_NN(cv); #define PUSHSUB_GET_LVALUE_MASK(func) \ @@ -620,17 +620,17 @@ struct block_format { ? 0 : (U8)func(aTHX) \ ) -#define PUSHSUB(cx, cv, hasargs) \ +#define PUSHSUB(cx, cv, op, hasargs) \ { \ U8 phlags = PUSHSUB_GET_LVALUE_MASK(Perl_was_lvalue_sub); \ - PUSHSUB_BASE(cx, cv, hasargs) \ + PUSHSUB_BASE(cx, cv, op, hasargs) \ cx->blk_u16 = PL_op->op_private & \ (phlags|OPpDEREF); \ } /* variant for use by OP_DBSTATE, where op_private holds hint bits */ -#define PUSHSUB_DB(cx, cv, hasargs) \ - PUSHSUB_BASE(cx, cv, hasargs) \ +#define PUSHSUB_DB(cx, cv, op, hasargs) \ + PUSHSUB_BASE(cx, cv, op, hasargs) \ cx->blk_u16 = 0; @@ -1345,7 +1345,7 @@ See L<perlcall/LIGHTWEIGHT CALLBACKS>. PUSHSTACKi(PERLSI_MULTICALL); \ PUSHBLOCK(cx, (CXt_SUB|CXp_MULTICALL|flags), gimme, \ PL_stack_sp, PL_savestack_ix); \ - PUSHSUB(cx, cv, hasargs); \ + PUSHSUB(cx, cv, NULL, hasargs); \ SAVEOP(); \ saveix_floor = PL_savestack_ix; \ if (!(flags & CXp_SUB_RE_FAKE)) \ @@ -1394,7 +1394,7 @@ See L<perlcall/LIGHTWEIGHT CALLBACKS>. assert(CxMULTICALL(cx)); \ CX_POPSUB_COMMON(cx); \ cx->cx_type = (CXt_SUB|CXp_MULTICALL|flags); \ - PUSHSUB(cx, cv, hasargs); \ + PUSHSUB(cx, cv, NULL, hasargs); \ if (!(flags & CXp_SUB_RE_FAKE)) \ CvDEPTH(cv)++; \ if (CvDEPTH(cv) >= 2) \ @@ -2014,8 +2014,7 @@ PP(pp_dbstate) } else { PUSHBLOCK(cx, CXt_SUB, gimme, SP, PL_savestack_ix); - PUSHSUB_DB(cx, cv, 0); - cx->blk_sub.retop = PL_op->op_next; + PUSHSUB_DB(cx, cv, PL_op->op_next, 0); SAVEI32(PL_debug); PL_debug = 0; @@ -3854,8 +3854,7 @@ PP(pp_entersub) gimme = GIMME_V; PUSHBLOCK(cx, CXt_SUB, gimme, MARK, old_savestack_ix); hasargs = cBOOL(PL_op->op_flags & OPf_STACKED); - PUSHSUB(cx, cv, hasargs); - cx->blk_sub.retop = PL_op->op_next; + PUSHSUB(cx, cv, PL_op->op_next, hasargs); padlist = CvPADLIST(cv); if (UNLIKELY((depth = ++CvDEPTH(cv)) >= 2)) @@ -1671,7 +1671,7 @@ PP(pp_sort) PUSHBLOCK(cx, CXt_NULL, gimme, PL_stack_base, old_savestack_ix); if (!(flags & OPf_SPECIAL)) { cx->cx_type = CXt_SUB|CXp_MULTICALL; - PUSHSUB(cx, cv, hasargs); + PUSHSUB(cx, cv, NULL, hasargs); if (!is_xsub) { PADLIST * const padlist = CvPADLIST(cv); |