This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
move blku_old_savestack_ix to base of cxt struct
[perl5.git] / cop.h
diff --git a/cop.h b/cop.h
index 8a45b09..e1f429d 100644 (file)
--- a/cop.h
+++ b/cop.h
@@ -572,8 +572,7 @@ struct block_format {
 
 /* free all savestack items back to the watermark of the specified context */
 
-#define CX_LEAVE_SCOPE(cx) \
-    LEAVE_SCOPE(cx->cx_u.cx_blk.blku_old_savestack_ix)
+#define CX_LEAVE_SCOPE(cx) LEAVE_SCOPE(cx->cx_old_savestack_ix)
 
 /* base for the next two macros. Don't use directly.
  * The context frame holds a reference to the CV so that it can't be
@@ -625,7 +624,7 @@ struct block_format {
        cx->blk_format.dfoutgv = PL_defoutgv;                           \
        cx->blk_format.prevcomppad = PL_comppad;                        \
        cx->blk_u16 = 0;                                                \
-        cx->cx_u.cx_blk.blku_old_savestack_ix = PL_savestack_ix;        \
+        cx->cx_old_savestack_ix = PL_savestack_ix;                      \
        SvREFCNT_inc_simple_void_NN(cv);                                \
        CvDEPTH(cv)++;                                                  \
        SvREFCNT_inc_void(cx->blk_format.dfoutgv)
@@ -785,7 +784,7 @@ struct block_loop {
        cx->blk_loop.my_op = cLOOP;                                     \
        cx->blk_loop.state_u.ary.ary = NULL;                            \
        cx->blk_loop.state_u.ary.ix = 0;                                \
-        cx->cx_u.cx_blk.blku_old_savestack_ix = PL_savestack_ix;        \
+        cx->cx_old_savestack_ix = PL_savestack_ix;                      \
        cx->blk_loop.itervar_u.svp = NULL;                              \
        cx->blk_loop.itersave = NULL;
 
@@ -801,7 +800,7 @@ struct block_loop {
        cx->blk_loop.state_u.ary.ary = NULL;                            \
        cx->blk_loop.state_u.ary.ix = 0;                                \
        cx->blk_loop.itervar_u.svp = (SV**)(ivar);                      \
-        cx->cx_u.cx_blk.blku_old_savestack_ix = PL_savestack_ix;        \
+        cx->cx_old_savestack_ix = PL_savestack_ix;                      \
         cx->blk_loop.itersave = isave;                                  \
         PUSHLOOP_FOR_setpad(cx);
 
@@ -829,7 +828,7 @@ struct block_givwhen {
 };
 
 #define PUSHWHEN(cx)                                                   \
-        cx->cx_u.cx_blk.blku_old_savestack_ix = PL_savestack_ix;        \
+        cx->cx_old_savestack_ix = PL_savestack_ix;                      \
        cx->blk_givwhen.leave_op = cLOGOP->op_other;
 
 #define PUSHGIVEN(cx, orig_var)                                         \
@@ -847,7 +846,7 @@ struct block_givwhen {
 /* basic block, i.e. pp_enter/leave */
 
 #define PUSHBASICBLK(cx)                                                \
-        cx->cx_u.cx_blk.blku_old_savestack_ix = PL_savestack_ix;
+        cx->cx_old_savestack_ix = PL_savestack_ix;
 
 #define POPBASICBLK(cx)                                                 \
        NOOP;
@@ -864,7 +863,6 @@ struct block {
     I32                blku_oldscopesp;        /* scope stack index */
     PMOP *     blku_oldpm;     /* values of pattern match vars */
     SSize_t     blku_old_tmpsfloor;     /* saved PL_tmps_floor */
-    I32         blku_old_savestack_ix;  /* saved PL_savestack_ix */
 
     union {
        struct block_sub        blku_sub;
@@ -896,7 +894,7 @@ struct block {
                    (long)PL_scopestack_ix,                             \
                    (long)(cxstack[cxstack_ix].blk_oldscopesp),         \
                    (long)PL_savestack_ix,                              \
-                   (long)(cxstack[cxstack_ix].cx_u.cx_blk.blku_old_savestack_ix),\
+                   (long)(cxstack[cxstack_ix].cx_old_savestack_ix),    \
                    __FILE__, __LINE__));
 
 /* Enter a block. */
@@ -921,8 +919,8 @@ struct block {
         /* 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->cx_u.cx_blk.blku_old_savestack_ix);  \
+        assert(   (CxTYPE(cx) == CXt_SUB && CxMULTICALL(cx))            \
+                || PL_savestack_ix == cx->cx_old_savestack_ix);         \
         PL_tmps_floor = cx->cx_u.cx_blk.blku_old_tmpsfloor;             \
        PL_curpm         = cx->blk_oldpm;
 
@@ -993,7 +991,7 @@ struct subst {
 #define CxONCE(cx)             ((cx)->cx_type & CXp_ONCE)
 
 struct context {
-    I32                        cx_old_savestack_ix;
+    I32                        cx_old_savestack_ix;   /* saved PL_savestack_ix */
     union {
        struct block    cx_blk;
        struct subst    cx_subst;
@@ -1262,7 +1260,7 @@ See L<perlcall/LIGHTWEIGHT CALLBACKS>.
        PUSHSTACKi(PERLSI_MULTICALL);                                   \
        PUSHBLOCK(cx, (CXt_SUB|CXp_MULTICALL|flags), PL_stack_sp);      \
        PUSHSUB(cx);                                                    \
-        cx->cx_u.cx_blk.blku_old_savestack_ix = PL_savestack_ix;        \
+        cx->cx_old_savestack_ix = PL_savestack_ix;                      \
        SAVEVPTR(PL_op);                                                \
         if (!(flags & CXp_SUB_RE_FAKE))                                 \
             CvDEPTH(cv)++;                                             \