PERL_CONTEXT *cx;
SV** newsp;
const bool oldcatch = CATCH_GET;
+ I32 old_savestack_ix = PL_savestack_ix;
- SAVETMPS;
SAVEOP();
CATCH_SET(TRUE);
cx->blk_sub.savearray = GvAV(PL_defgv);
GvAV(PL_defgv) = MUTABLE_AV(SvREFCNT_inc_simple(av));
- CX_CURPAD_SAVE(cx->blk_sub);
- cx->blk_sub.argarray = av;
}
}
}
+ else {
+ /* mimic PUSHSUB. Note that we're cheating and using a
+ * CXt_NULL block as a CXt_SUB block */
+ cx->cx_u.cx_blk.blku_old_tmpsfloor = PL_tmps_floor;
+ PL_tmps_floor = PL_tmps_ix;
+ }
+ cx->cx_u.cx_blk.blku_old_savestack_ix = old_savestack_ix;
+
cx->cx_type |= CXp_MULTICALL;
start = p1 - max;
POPSUB(cx, sv);
LEAVESUB(sv);
}
+ else
+ /* mimic POPSUB */
+ PL_tmps_floor = cx->cx_u.cx_blk.blku_old_tmpsfloor;
+
POPBLOCK(cx,PL_curpm);
PL_stack_sp = newsp;
POPSTACK;