-/* Enter a block. */
-#define PUSHBLOCK(cx, t, gimme, sp, saveix) \
- CXINC, \
- cx = CX_CUR(), \
- cx->cx_type = t, \
- cx->blk_oldsp = sp - PL_stack_base, \
- cx->blk_oldcop = PL_curcop, \
- cx->blk_oldmarksp = PL_markstack_ptr - PL_markstack, \
- cx->blk_oldsaveix = saveix, \
- cx->blk_oldscopesp = PL_scopestack_ix, \
- cx->blk_oldpm = PL_curpm, \
- cx->blk_gimme = (U8)gimme; \
- cx->cx_u.cx_blk.blku_old_tmpsfloor = PL_tmps_floor; \
- PL_tmps_floor = PL_tmps_ix; \
- CX_DEBUG(cx, "PUSH");
-
-#define _CX_POPBLOCK_COMMON(cx) \
- PL_markstack_ptr = PL_markstack + cx->blk_oldmarksp, \
- PL_scopestack_ix = cx->blk_oldscopesp, \
- PL_curpm = cx->blk_oldpm,
-
-/* Exit a block (RETURN and LAST). */
-#define CX_POPBLOCK(cx) \
- CX_DEBUG(cx, "POP"); \
- _CX_POPBLOCK_COMMON(cx) \
- /* LEAVE_SCOPE() should have made this true. /(?{})/ cheats
- * and leaves a CX entry lying around for repeated use, so
- * skip for multicall */ \
- assert( (CxTYPE(cx) == CXt_SUB && CxMULTICALL(cx)) \
- || PL_savestack_ix == cx->blk_oldsaveix); \
- PL_curcop = cx->blk_oldcop, \
- PL_tmps_floor = cx->cx_u.cx_blk.blku_old_tmpsfloor; \
-
-/* Continue a block elsewhere (e.g. NEXT, REDO, GOTO).
- * Whereas CX_POPBLOCK restores the state to the point just before PUSHBLOCK
- * was called, CX_TOPBLOCK restores it to the point just *after* PUSHBLOCK
- * was called. */
-#define CX_TOPBLOCK(cx) \
- CX_DEBUG(cx, "TOP"); \
- _CX_POPBLOCK_COMMON(cx) \
- PL_stack_sp = PL_stack_base + cx->blk_oldsp;