Merge lval and hasargs into one U8 in struct block_sub
Nicholas Clark [Fri, 1 Sep 2006 17:25:50 +0000 (17:25 +0000)]
p4raw-id: //depot/perl@28774

cop.h

diff --git a/cop.h b/cop.h
index df07aa6..65651b0 100644 (file)
--- a/cop.h
+++ b/cop.h
@@ -268,19 +268,20 @@ struct block_sub {
     AV *       savearray;
     AV *       argarray;
     I32                olddepth;
-    U8         hasargs;
-    U8         lval;           /* XXX merge lval and hasargs? */
+    /* These are merged to to get struct context down to 64 bytes on ILP32.  */
+    U8         hasargs_lval;
     PAD                *oldcomppad;
     OP *       retop;  /* op to execute on exit from sub */
 };
 
-#define CX_SUB_HASARGS_SET(cx, v)      ((cx)->blk_sub.hasargs = (v))
-#define CX_SUB_HASARGS_GET(cx)         ((cx)->blk_sub.hasargs + 0)
+#define CX_SUB_HASARGS_SET(cx, v)      ((cx)->blk_sub.hasargs_lval = \
+ ((cx)->blk_sub.hasargs_lval & 0xFE) | ((v) ? 1 : 0))
+#define CX_SUB_HASARGS_GET(cx)         ((cx)->blk_sub.hasargs_lval & 0x01)
 
-#define CX_SUB_LVAL_SET(cx, v)         ((cx)->blk_sub.lval = (v) &     \
-                                        (OPpLVAL_INTRO|OPpENTERSUB_INARGS))
-#define CX_SUB_LVAL(cx)                        ((cx)->blk_sub.lval + 0)
-#define CX_SUB_LVAL_INARGS(cx)         ((cx)->blk_sub.lval &           \
+#define CX_SUB_LVAL_SET(cx, v)         ((cx)->blk_sub.hasargs_lval = \
+ (((cx)->blk_sub.hasargs_lval & 0x01) | ((v) & (OPpLVAL_INTRO|OPpENTERSUB_INARGS))))
+#define CX_SUB_LVAL(cx)                        ((cx)->blk_sub.hasargs_lval & 0xFE)
+#define CX_SUB_LVAL_INARGS(cx)         ((cx)->blk_sub.hasargs_lval & \
                                         OPpENTERSUB_INARGS)
 
 /* base for the next two macros. Don't use directly.