Change 33027 by [EMAIL PROTECTED] on 2008/01/21 14:09:06
Squeeze the context type down to 4 bits, and move the private flags to
fit within the next 4 bits.
Affected files ...
... //depot/perl/cop.h#157 edit
Differences ...
==== //depot/perl/cop.h#157 (text) ====
Index: perl/cop.h
--- perl/cop.h#156~33025~ 2008-01-21 03:50:52.000000000 -0800
+++ perl/cop.h 2008-01-21 06:09:06.000000000 -0800
@@ -657,7 +657,7 @@
};
#define cx_type cx_u.cx_subst.sbu_type
-#define CXTYPEMASK 0xff
+#define CXTYPEMASK 0xf
#define CXt_NULL 0
#define CXt_SUB 1
#define CXt_EVAL 2
@@ -668,22 +668,25 @@
#define CXt_GIVEN 7
#define CXt_WHEN 8
-/* private flags for CXt_SUB and CXt_NULL */
-#define CXp_MULTICALL 0x00000400 /* part of a multicall (so don't
+/* private flags for CXt_SUB and CXt_NULL
+ However, this is checked in many places which do not check the type, so
+ this bit needs to be kept clear for most everything else. For reasons I
+ haven't investigated, it can coexist with CXp_FOR_DEF */
+#define CXp_MULTICALL 0x0000040 /* part of a multicall (so don't
tear down context on exit). */
/* private flags for CXt_SUB and CXt_FORMAT */
-#define CXp_HASARGS 0x00000200
+#define CXp_HASARGS 0x00000020
/* private flags for CXt_EVAL */
-#define CXp_REAL 0x00000100 /* truly eval'', not a lookalike */
-#define CXp_TRYBLOCK 0x00000200 /* eval{}, not eval'' or similar */
+#define CXp_REAL 0x00000010 /* truly eval'', not a lookalike */
+#define CXp_TRYBLOCK 0x00000020 /* eval{}, not eval'' or similar */
/* private flags for CXt_LOOP */
-#define CXp_FOREACH 0x00000200 /* a foreach loop */
-#define CXp_FOR_DEF 0x00000400 /* foreach using $_ */
+#define CXp_FOREACH 0x00000020 /* a foreach loop */
+#define CXp_FOR_DEF 0x00000040 /* foreach using $_ */
#ifdef USE_ITHREADS
-# define CXp_PADVAR 0x00000100 /* itervar lives on pad, iterdata
+# define CXp_PADVAR 0x00000010 /* itervar lives on pad, iterdata
has pad offset; if not set,
iterdata holds GV* */
# define CxPADLOOP(c) (((c)->cx_type & (CXt_LOOP|CXp_PADVAR)) \
End of Patch.