Replace CX_PUSHEVAL() with cx_pusheval() etc.
No functional changes.
#define CxOLD_IN_EVAL(cx) (((cx)->blk_u16) & 0x7F)
#define CxOLD_OP_TYPE(cx) (((cx)->blk_u16) >> 7)
-#define CX_PUSHEVAL(cx, op, n) \
- STMT_START { \
- assert(!(PL_in_eval & ~0x7F)); \
- assert(!(PL_op->op_type & ~0x1FF)); \
- cx->blk_u16 = (PL_in_eval & 0x7F) | ((U16)PL_op->op_type << 7); \
- cx->blk_eval.old_namesv = (n); \
- cx->blk_eval.old_eval_root = PL_eval_root; \
- cx->blk_eval.cur_text = PL_parser ? PL_parser->linestr : NULL; \
- cx->blk_eval.cv = NULL; /* set by doeval_compile() as applicable */ \
- cx->blk_eval.retop = op; \
- cx->blk_eval.cur_top_env = PL_top_env; \
- } STMT_END
-
-#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; \
- if (sv && SvSCREAM(sv)) { \
- cx->blk_eval.cur_text = NULL; \
- SvREFCNT_dec_NN(sv); \
- } \
- sv = cx->blk_eval.old_namesv; \
- if (sv && !SvTEMP(sv))/* TEMP implies CX_POPEVAL re-entrantly called */ \
- sv_2mortal(sv); \
- } STMT_END
-
/* loop context */
struct block_loop {
LOOP * my_op; /* My op, that contains redo, next and last ops. */
AiM |void |cx_pushformat |NN PERL_CONTEXT *cx|NN CV *cv \
|NULLOK OP *retop|NULLOK GV *gv
AiM |void |cx_popformat |NN PERL_CONTEXT *cx
+AiM |void |cx_pusheval |NN PERL_CONTEXT *cx \
+ |NULLOK OP *retop|NULLOK SV *namesv
+AiM |void |cx_popeval |NN PERL_CONTEXT *cx
#endif
: ex: set ts=8 sts=4 sw=4 noet:
#define append_utf8_from_native_byte S_append_utf8_from_native_byte
#define av_top_index(a) S_av_top_index(aTHX_ a)
#define cx_popblock(a) S_cx_popblock(aTHX_ a)
+#define cx_popeval(a) S_cx_popeval(aTHX_ a)
#define cx_popformat(a) S_cx_popformat(aTHX_ a)
#define cx_popsub(a) S_cx_popsub(aTHX_ a)
#define cx_popsub_args(a) S_cx_popsub_args(aTHX_ a)
#define cx_popsub_common(a) S_cx_popsub_common(aTHX_ a)
#define cx_pushblock(a,b,c,d) S_cx_pushblock(aTHX_ a,b,c,d)
+#define cx_pusheval(a,b,c) S_cx_pusheval(aTHX_ a,b,c)
#define cx_pushformat(a,b,c,d) S_cx_pushformat(aTHX_ a,b,c,d)
#define cx_pushsub(a,b,c,d) S_cx_pushsub(aTHX_ a,b,c,d)
#define cx_topblock(a) S_cx_topblock(aTHX_ a)
}
+PERL_STATIC_INLINE void
+S_cx_pusheval(pTHX_ PERL_CONTEXT *cx, OP *retop, SV *namesv)
+{
+ PERL_ARGS_ASSERT_CX_PUSHEVAL;
+
+ cx->blk_eval.retop = retop;
+ cx->blk_eval.old_namesv = namesv;
+ cx->blk_eval.old_eval_root = PL_eval_root;
+ cx->blk_eval.cur_text = PL_parser ? PL_parser->linestr : NULL;
+ cx->blk_eval.cv = NULL; /* later set by doeval_compile() */
+ cx->blk_eval.cur_top_env = PL_top_env;
+
+ assert(!(PL_in_eval & ~ 0x7F));
+ assert(!(PL_op->op_type & ~0x1FF));
+ cx->blk_u16 = (PL_in_eval & 0x7F) | ((U16)PL_op->op_type << 7);
+}
+
+
+PERL_STATIC_INLINE void
+S_cx_popeval(pTHX_ PERL_CONTEXT *cx)
+{
+ SV *sv;
+
+ PERL_ARGS_ASSERT_CX_POPEVAL;
+ 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;
+ if (sv && SvSCREAM(sv)) {
+ cx->blk_eval.cur_text = NULL;
+ SvREFCNT_dec_NN(sv);
+ }
+
+ sv = cx->blk_eval.old_namesv;
+ if (sv && !SvTEMP(sv))/* TEMP implies cx_popeval() re-entrantly called */
+ sv_2mortal(sv);
+}
/*
U8 op_private;
#endif
-/* If op_type:9 is changed to :10, also change CX_PUSHEVAL in cop.h.
+/* If op_type:9 is changed to :10, also change cx_pusheval()
Also, if the type of op_type is ever changed (e.g. to PERL_BITFIELD32)
then all the other bit-fields before/after it should change their
types too to let VC pack them into the same 4 byte integer.*/
myop.op_private = (OPpEVAL_COPHH | OPpEVAL_RE_REPARSING);
/* fail now; otherwise we could fail after the JMPENV_PUSH but
- * before a CX_PUSHEVAL, which corrupts the stack after a croak */
+ * before a cx_pusheval(), which corrupts the stack after a croak */
TAINT_PROPER("eval_sv()");
JMPENV_PUSH(ret);
cx_popsub(cx);
break;
case CXt_EVAL:
- CX_POPEVAL(cx);
+ cx_popeval(cx);
break;
case CXt_LOOP_PLAIN:
case CXt_LOOP_LAZYIV:
PL_stack_sp = oldsp;
CX_LEAVE_SCOPE(cx);
- CX_POPEVAL(cx);
+ cx_popeval(cx);
cx_popblock(cx);
restartjmpenv = cx->blk_eval.cur_top_env;
restartop = cx->blk_eval.retop;
SP = PL_stack_base + POPMARK; /* pop original mark */
cx = CX_CUR();
CX_LEAVE_SCOPE(cx);
- CX_POPEVAL(cx);
+ cx_popeval(cx);
cx_popblock(cx);
if (in_require)
namesv = cx->blk_eval.old_namesv;
/* switch to eval mode */
cx = cx_pushblock(CXt_EVAL, gimme, SP, old_savestack_ix);
- CX_PUSHEVAL(cx, PL_op->op_next, newSVpv(name, 0));
+ cx_pusheval(cx, PL_op->op_next, newSVpv(name, 0));
SAVECOPLINE(&PL_compiling);
CopLINE_set(&PL_compiling, 0);
runcv = find_runcv(&seq);
cx = cx_pushblock((CXt_EVAL|CXp_REAL), gimme, SP, old_savestack_ix);
- CX_PUSHEVAL(cx, PL_op->op_next, NULL);
+ cx_pusheval(cx, PL_op->op_next, NULL);
/* prepare to compile string */
OP *retop;
SV *namesv = NULL;
CV *evalcv;
- /* grab this value before CX_POPEVAL restores old PL_in_eval */
+ /* grab this value before cx_popeval restores old PL_in_eval */
bool keep = cBOOL(PL_in_eval & EVAL_KEEPERR);
PERL_ASYNC_CHECK();
else
leave_adjust_stacks(oldsp, oldsp, gimme, 0);
- /* the CX_POPEVAL does a leavescope, which frees the optree associated
+ /* the cx_popeval does a leavescope, which frees the optree associated
* with eval, which if it frees the nextstate associated with
* PL_curcop, sets PL_curcop to NULL. Which can mess up freeing a
* regex when running under 'use re Debug' because it needs PL_curcop
PL_curcop = cx->blk_oldcop;
CX_LEAVE_SCOPE(cx);
- CX_POPEVAL(cx);
+ cx_popeval(cx);
cx_popblock(cx);
retop = cx->blk_eval.retop;
evalcv = cx->blk_eval.cv;
cx = CX_CUR();
CX_LEAVE_SCOPE(cx);
- CX_POPEVAL(cx);
+ cx_popeval(cx);
cx_popblock(cx);
CX_POP(cx);
}
cx = cx_pushblock((CXt_EVAL|CXp_TRYBLOCK), gimme,
PL_stack_sp, PL_savestack_ix);
- CX_PUSHEVAL(cx, retop, NULL);
+ cx_pusheval(cx, retop, NULL);
PL_in_eval = EVAL_INEVAL;
if (flags & G_KEEPERR)
else
leave_adjust_stacks(oldsp, oldsp, gimme, 1);
CX_LEAVE_SCOPE(cx);
- CX_POPEVAL(cx);
+ cx_popeval(cx);
cx_popblock(cx);
retop = cx->blk_eval.retop;
CX_POP(cx);
PERL_STATIC_INLINE void S_cx_popblock(pTHX_ PERL_CONTEXT *cx);
#define PERL_ARGS_ASSERT_CX_POPBLOCK \
assert(cx)
+PERL_STATIC_INLINE void S_cx_popeval(pTHX_ PERL_CONTEXT *cx);
+#define PERL_ARGS_ASSERT_CX_POPEVAL \
+ assert(cx)
PERL_STATIC_INLINE void S_cx_popformat(pTHX_ PERL_CONTEXT *cx);
#define PERL_ARGS_ASSERT_CX_POPFORMAT \
assert(cx)
PERL_STATIC_INLINE PERL_CONTEXT * S_cx_pushblock(pTHX_ U8 type, U8 gimme, SV** sp, I32 saveix);
#define PERL_ARGS_ASSERT_CX_PUSHBLOCK \
assert(sp)
+PERL_STATIC_INLINE void S_cx_pusheval(pTHX_ PERL_CONTEXT *cx, OP *retop, SV *namesv);
+#define PERL_ARGS_ASSERT_CX_PUSHEVAL \
+ assert(cx)
PERL_STATIC_INLINE void S_cx_pushformat(pTHX_ PERL_CONTEXT *cx, CV *cv, OP *retop, GV *gv);
#define PERL_ARGS_ASSERT_CX_PUSHFORMAT \
assert(cx); assert(cv)