+ 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;