make regen needed.
This commit moves some bits in extflags around so that all the unallocated
ones are at the boundary between the unshared portion and the portion
shared with op.h. This allows them to be allocated in the future to go
either way, without affecting binary compatibility at that time.
The high-order bits are unaffected, but the low order ones move to fill
the gap.
running perl with the version a module has been compiled for and raises an
exception if they don't match.
+=head2 Binary Incompatible with all previous Perls
+
+Some bit fields have been reordered, hence this release will not be binary
+comptible with any previous Perl release.
+
=head1 Deprecations
XXX Any deprecated features, syntax, modules etc. should be listed here.
*
*/
-#define RXf_BASE_SHIFT (_RXf_PMf_SHIFT_NEXT+2)
+/* Leave some space, so future bit allocations can go either in the shared or
+ * unshared area without affecting binary compatibility */
+#define RXf_BASE_SHIFT (_RXf_PMf_SHIFT_NEXT+3)
/* Anchor and GPOS related stuff */
#define RXf_ANCH_BOL (1<<(RXf_BASE_SHIFT+0))
#define RXf_CHECK_ALL (1<<(RXf_BASE_SHIFT+10))
/* UTF8 related */
-#define RXf_MATCH_UTF8 (1<<(RXf_BASE_SHIFT+12))
+#define RXf_MATCH_UTF8 (1<<(RXf_BASE_SHIFT+11))
/* Intuit related */
-#define RXf_USE_INTUIT_NOML (1<<(RXf_BASE_SHIFT+13))
-#define RXf_USE_INTUIT_ML (1<<(RXf_BASE_SHIFT+14))
-#define RXf_INTUIT_TAIL (1<<(RXf_BASE_SHIFT+15))
+#define RXf_USE_INTUIT_NOML (1<<(RXf_BASE_SHIFT+12))
+#define RXf_USE_INTUIT_ML (1<<(RXf_BASE_SHIFT+13))
+#define RXf_INTUIT_TAIL (1<<(RXf_BASE_SHIFT+14))
/*
Set in Perl_pmruntime if op_flags & OPf_SPECIAL, i.e. split. Will
be used by regex engines to check whether they should set
RXf_SKIPWHITE
*/
-#define RXf_SPLIT (1<<(RXf_BASE_SHIFT+16))
+#define RXf_SPLIT (1<<(RXf_BASE_SHIFT+15))
#define RXf_USE_INTUIT (RXf_USE_INTUIT_NOML|RXf_USE_INTUIT_ML)
/* Copy and tainted info */
-#define RXf_COPY_DONE (1<<(RXf_BASE_SHIFT+17))
-#define RXf_TAINTED_SEEN (1<<(RXf_BASE_SHIFT+18))
-#define RXf_TAINTED (1<<(RXf_BASE_SHIFT+19)) /* this pattern is tainted */
+#define RXf_COPY_DONE (1<<(RXf_BASE_SHIFT+16))
+#define RXf_TAINTED_SEEN (1<<(RXf_BASE_SHIFT+17))
+#define RXf_TAINTED (1<<(RXf_BASE_SHIFT+18)) /* this pattern is tainted */
/* Flags indicating special patterns */
-#define RXf_START_ONLY (1<<(RXf_BASE_SHIFT+20)) /* Pattern is /^/ */
-#define RXf_SKIPWHITE (1<<(RXf_BASE_SHIFT+21)) /* Pattern is for a split / / */
-#define RXf_WHITE (1<<(RXf_BASE_SHIFT+22)) /* Pattern is /\s+/ */
-#define RXf_NULL (1<<(RXf_BASE_SHIFT+23)) /* Pattern is // */
-#if RXf_BASE_SHIFT+23 > 31
+#define RXf_START_ONLY (1<<(RXf_BASE_SHIFT+19)) /* Pattern is /^/ */
+#define RXf_SKIPWHITE (1<<(RXf_BASE_SHIFT+20)) /* Pattern is for a split / / */
+#define RXf_WHITE (1<<(RXf_BASE_SHIFT+21)) /* Pattern is /\s+/ */
+#define RXf_NULL (1<<(RXf_BASE_SHIFT+22)) /* Pattern is // */
+#if RXf_BASE_SHIFT+22 > 31
# error Too many RXf_PMf bits used. See regnodes.h for any spare in middle
#endif
EXTCONST char * PL_reg_extflags_name[];
#else
EXTCONST char * const PL_reg_extflags_name[] = {
- /* Bits in extflags defined: 11111111111101111111111100111111 */
+ /* Bits in extflags defined: 11111111111111111111111000111111 */
"MULTILINE", /* 0x00000001 */
"SINGLELINE", /* 0x00000002 */
"FOLD", /* 0x00000004 */
"LOCALE", /* 0x00000020 */
"UNUSED_BIT_6", /* 0x00000040 */
"UNUSED_BIT_7", /* 0x00000080 */
- "ANCH_BOL", /* 0x00000100 */
- "ANCH_MBOL", /* 0x00000200 */
- "ANCH_SBOL", /* 0x00000400 */
- "ANCH_GPOS", /* 0x00000800 */
- "GPOS_SEEN", /* 0x00001000 */
- "GPOS_FLOAT", /* 0x00002000 */
- "LOOKBEHIND_SEEN", /* 0x00004000 */
- "EVAL_SEEN", /* 0x00008000 */
- "CANY_SEEN", /* 0x00010000 */
- "NOSCAN", /* 0x00020000 */
- "CHECK_ALL", /* 0x00040000 */
- "UNUSED_BIT_19", /* 0x00080000 */
+ "UNUSED_BIT_8", /* 0x00000100 */
+ "ANCH_BOL", /* 0x00000200 */
+ "ANCH_MBOL", /* 0x00000400 */
+ "ANCH_SBOL", /* 0x00000800 */
+ "ANCH_GPOS", /* 0x00001000 */
+ "GPOS_SEEN", /* 0x00002000 */
+ "GPOS_FLOAT", /* 0x00004000 */
+ "LOOKBEHIND_SEEN", /* 0x00008000 */
+ "EVAL_SEEN", /* 0x00010000 */
+ "CANY_SEEN", /* 0x00020000 */
+ "NOSCAN", /* 0x00040000 */
+ "CHECK_ALL", /* 0x00080000 */
"MATCH_UTF8", /* 0x00100000 */
"USE_INTUIT_NOML", /* 0x00200000 */
"USE_INTUIT_ML", /* 0x00400000 */