summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
b405d38)
At the start of each CX_POPFOO(cx) macro, add an assertion that cx is of
type CXt_FOO.
#define CX_POPSUB_COMMON(cx) \
STMT_START { \
CV *cv; \
#define CX_POPSUB_COMMON(cx) \
STMT_START { \
CV *cv; \
+ assert(CxTYPE(cx) == CXt_SUB); \
PL_comppad = cx->blk_sub.prevcomppad; \
PL_curpad = LIKELY(PL_comppad) ? AvARRAY(PL_comppad) : NULL; \
cv = cx->blk_sub.cv; \
PL_comppad = cx->blk_sub.prevcomppad; \
PL_curpad = LIKELY(PL_comppad) ? AvARRAY(PL_comppad) : NULL; \
cv = cx->blk_sub.cv; \
#define CX_POPSUB_ARGS(cx) \
STMT_START { \
AV *av; \
#define CX_POPSUB_ARGS(cx) \
STMT_START { \
AV *av; \
+ assert(CxTYPE(cx) == CXt_SUB); \
assert(AvARRAY(MUTABLE_AV( \
PadlistARRAY(CvPADLIST(cx->blk_sub.cv))[ \
CvDEPTH(cx->blk_sub.cv)])) == PL_curpad); \
assert(AvARRAY(MUTABLE_AV( \
PadlistARRAY(CvPADLIST(cx->blk_sub.cv))[ \
CvDEPTH(cx->blk_sub.cv)])) == PL_curpad); \
#define CX_POPSUB(cx) \
STMT_START { \
#define CX_POPSUB(cx) \
STMT_START { \
+ assert(CxTYPE(cx) == CXt_SUB); \
RETURN_PROBE(CvNAMED(cx->blk_sub.cv) \
? HEK_KEY(CvNAME_HEK(cx->blk_sub.cv)) \
: GvENAME(CvGV(cx->blk_sub.cv)), \
RETURN_PROBE(CvNAMED(cx->blk_sub.cv) \
? HEK_KEY(CvNAME_HEK(cx->blk_sub.cv)) \
: GvENAME(CvGV(cx->blk_sub.cv)), \
STMT_START { \
CV *cv; \
GV * const dfout = cx->blk_format.dfoutgv; \
STMT_START { \
CV *cv; \
GV * const dfout = cx->blk_format.dfoutgv; \
+ assert(CxTYPE(cx) == CXt_FORMAT); \
setdefout(dfout); \
cx->blk_format.dfoutgv = NULL; \
SvREFCNT_dec_NN(dfout); /* the cx->defoutgv ref */ \
setdefout(dfout); \
cx->blk_format.dfoutgv = NULL; \
SvREFCNT_dec_NN(dfout); /* the cx->defoutgv ref */ \
#define CX_POPEVAL(cx) \
STMT_START { \
SV *sv; \
#define CX_POPEVAL(cx) \
STMT_START { \
SV *sv; \
+ assert(CxTYPE(cx) == CXt_EVAL); \
PL_in_eval = CxOLD_IN_EVAL(cx); \
PL_eval_root = cx->blk_eval.old_eval_root; \
sv = cx->blk_eval.cur_text; \
PL_in_eval = CxOLD_IN_EVAL(cx); \
PL_eval_root = cx->blk_eval.old_eval_root; \
sv = cx->blk_eval.cur_text; \
PUSHLOOP_FOR_setpad(cx);
#define CX_POPLOOP(cx) \
PUSHLOOP_FOR_setpad(cx);
#define CX_POPLOOP(cx) \
+ assert(CxTYPE_is_LOOP(cx)); \
if ( CxTYPE(cx) == CXt_LOOP_ARY \
|| CxTYPE(cx) == CXt_LOOP_LAZYSV) \
{ \
if ( CxTYPE(cx) == CXt_LOOP_ARY \
|| CxTYPE(cx) == CXt_LOOP_LAZYSV) \
{ \
cx->blk_givwhen.defsv_save = orig_var;
#define CX_POPWHEN(cx) \
cx->blk_givwhen.defsv_save = orig_var;
#define CX_POPWHEN(cx) \
+ assert(CxTYPE(cx) == CXt_WHEN); \
NOOP;
#define CX_POPGIVEN(cx) \
STMT_START { \
SV *sv = GvSV(PL_defgv); \
NOOP;
#define CX_POPGIVEN(cx) \
STMT_START { \
SV *sv = GvSV(PL_defgv); \
+ assert(CxTYPE(cx) == CXt_GIVEN); \
GvSV(PL_defgv) = cx->blk_givwhen.defsv_save; \
cx->blk_givwhen.defsv_save = NULL; \
SvREFCNT_dec(sv); \
GvSV(PL_defgv) = cx->blk_givwhen.defsv_save; \
cx->blk_givwhen.defsv_save = NULL; \
SvREFCNT_dec(sv); \
cx->blk_oldsaveix = PL_savestack_ix;
#define CX_POPBASICBLK(cx) \
cx->blk_oldsaveix = PL_savestack_ix;
#define CX_POPBASICBLK(cx) \
+ assert(CxTYPE(cx) == CXt_BLOCK); \
# define CX_POPSUBST(cx) \
STMT_START { \
REGEXP *re; \
# define CX_POPSUBST(cx) \
STMT_START { \
REGEXP *re; \
+ assert(CxTYPE(cx) == CXt_SUBST); \
rxres_free(&cx->sb_rxres); \
re = cx->sb_rx; \
cx->sb_rx = NULL; \
rxres_free(&cx->sb_rxres); \
re = cx->sb_rx; \
cx->sb_rx = NULL; \