#define POPSUB(cx,sv) \
STMT_START { \
+ const I32 olddepth = cx->blk_sub.olddepth; \
RETURN_PROBE(CvNAMED(cx->blk_sub.cv) \
? HEK_KEY(CvNAME_HEK(cx->blk_sub.cv)) \
: GvENAME(CvGV(cx->blk_sub.cv)), \
} \
} \
sv = MUTABLE_SV(cx->blk_sub.cv); \
- if (sv && (CvDEPTH((const CV*)sv) = cx->blk_sub.olddepth)) \
+ LEAVE_SCOPE(PL_scopestack[cx->blk_oldscopesp-1]); \
+ if (sv && (CvDEPTH((const CV*)sv) = olddepth)) \
sv = NULL; \
} STMT_END
} STMT_END
#define POPFORMAT(cx) \
- setdefout(cx->blk_format.dfoutgv); \
- CvDEPTH(cx->blk_format.cv)--; \
- if (!CvDEPTH(cx->blk_format.cv)) \
+ STMT_START { \
+ CV * const cv = cx->blk_format.cv; \
+ GV * const dfuot = cx->blk_format.dfoutgv; \
+ setdefout(dfuot); \
+ LEAVE_SCOPE(PL_scopestack[cx->blk_oldscopesp-1]); \
+ if (!--CvDEPTH(cv)) \
SvREFCNT_dec_NN(cx->blk_format.cv); \
- SvREFCNT_dec_NN(cx->blk_format.dfoutgv);
+ SvREFCNT_dec_NN(dfuot); \
+ } STMT_END
/* eval context */
struct block_eval {