-#define POPSUB(cx) \
- STMT_START { \
- CX_LEAVE_SCOPE(cx); \
- if (!(cx->blk_u16 & CxPOPSUB_DONE)) { \
- cx->blk_u16 |= CxPOPSUB_DONE; \
- RETURN_PROBE(CvNAMED(cx->blk_sub.cv) \
- ? HEK_KEY(CvNAME_HEK(cx->blk_sub.cv)) \
- : GvENAME(CvGV(cx->blk_sub.cv)), \
- CopFILE((COP*)CvSTART((const CV*)cx->blk_sub.cv)), \
- CopLINE((COP*)CvSTART((const CV*)cx->blk_sub.cv)), \
- CopSTASHPV((COP*)CvSTART((const CV*)cx->blk_sub.cv))); \
- \
- if (CxHASARGS(cx)) { \
- AV *av; \
- assert(AvARRAY(MUTABLE_AV( \
- PadlistARRAY(CvPADLIST(cx->blk_sub.cv))[ \
- CvDEPTH(cx->blk_sub.cv)])) == PL_curpad); \
- POP_SAVEARRAY(); \
- /* abandon @_ if it got reified */ \
- av = MUTABLE_AV(PAD_SVl(0)); \
- if (UNLIKELY(AvREAL(av))) \
- clear_defarray(av, 0); \
- else { \
- CLEAR_ARGARRAY(av); \
- } \
- } \
- } \
- PL_comppad = cx->blk_sub.prevcomppad; \
- PL_curpad = LIKELY(PL_comppad) ? AvARRAY(PL_comppad) : NULL; \
- CvDEPTH((const CV*)cx->blk_sub.cv) = cx->blk_sub.olddepth; \
- SvREFCNT_dec_NN(cx->blk_sub.cv); \
- PL_tmps_floor = cx->cx_u.cx_blk.blku_old_tmpsfloor; \
- } STMT_END
-
-#define POPFORMAT(cx) \
- STMT_START { \
- CX_LEAVE_SCOPE(cx); \
- if (!(cx->blk_u16 & CxPOPSUB_DONE)) { \
- CV * const cv = cx->blk_format.cv; \
- GV * const dfuot = cx->blk_format.dfoutgv; \
- cx->blk_u16 |= CxPOPSUB_DONE; \
- setdefout(dfuot); \
- PL_comppad = cx->blk_format.prevcomppad; \
- PL_curpad = LIKELY(PL_comppad) ? AvARRAY(PL_comppad) : NULL; \
- --CvDEPTH(cv); \
- SvREFCNT_dec_NN(cx->blk_format.cv); \
- SvREFCNT_dec_NN(dfuot); \
- } \
- PL_tmps_floor = cx->cx_u.cx_blk.blku_old_tmpsfloor; \
- } STMT_END