summaryrefslogtreecommitdiff
path: root/op.h
diff options
context:
space:
mode:
authorKarl Williamson <khw@khw-desktop.(none)>2010-07-19 22:26:43 -0600
committerRafael Garcia-Suarez <rgs@consttype.org>2010-07-29 12:10:18 +0200
commit1850c8f94216e3e6bf08ca1f3121b4a91d01d1bf (patch)
tree3ca0eb84849e8b79f73a6ba5a5ad48c657386295 /op.h
parente32a881648677e322dff2b672a89f19c7d31b263 (diff)
downloadperl-1850c8f94216e3e6bf08ca1f3121b4a91d01d1bf.tar.gz
Refactor common parts of op.h, regexp.h into new .h
op.h and regexp.h share common elements in their data structures. They have had to manually be kept in sync. This patch makes it easier by putting those common parts into a common header #included by the two. To do this, it seemed easiest to change the symbol definitions to use left shifts to generate the flag bits. But this meant that regcomp.pl and axt/B/defsubs_h.PL had to be taught to recognize those forms of expressions, done in separate commits
Diffstat (limited to 'op.h')
-rw-r--r--op.h48
1 files changed, 25 insertions, 23 deletions
diff --git a/op.h b/op.h
index 257a951433..7873a7483a 100644
--- a/op.h
+++ b/op.h
@@ -36,6 +36,7 @@
* the operation is privatized by a check routine,
* which may or may not check number of children).
*/
+#include "op_reg_common.h"
#define OPCODE U16
@@ -359,38 +360,39 @@ struct pmop {
#define PM_SETRE(o,r) ((o)->op_pmregexp = (r))
#endif
-
-#define PMf_RETAINT 0x00000040 /* taint $1 etc. if target tainted */
+/* taint $1 etc. if target tainted */
+#define PMf_RETAINT (1<<(_RXf_PMf_SHIFT+1))
/* match successfully only once per reset, with related flag RXf_USED in
* re->extflags holding state. This is used only for ?? matches, and only on
* OP_MATCH and OP_QR */
-#define PMf_ONCE 0x00000080
-#define PMf_UNUSED 0x00000100 /* free for use */
-#define PMf_MAYBE_CONST 0x00000200 /* replacement contains variables */
+#define PMf_ONCE (1<<(_RXf_PMf_SHIFT+2))
+
+/* replacement contains variables */
+#define PMf_MAYBE_CONST (1<<(_RXf_PMf_SHIFT+3))
+
+/* PMf_ONCE has matched successfully. Not used under threading. */
+#define PMf_USED (1<<(_RXf_PMf_SHIFT+4))
+
+/* subst replacement is constant */
+#define PMf_CONST (1<<(_RXf_PMf_SHIFT+5))
-/* PMf_ONCE has matched successfully. Not used under threading. */
-#define PMf_USED 0x00000400
+/* keep 1st runtime pattern forever */
+#define PMf_KEEP (1<<(_RXf_PMf_SHIFT+6))
+#define PMf_GLOBAL (1<<(_RXf_PMf_SHIFT+7)) /* pattern had a g modifier */
-#define PMf_CONST 0x00000800 /* subst replacement is constant */
-#define PMf_KEEP 0x00001000 /* keep 1st runtime pattern forever */
-#define PMf_GLOBAL 0x00002000 /* pattern had a g modifier */
-#define PMf_CONTINUE 0x00004000 /* don't reset pos() if //g fails */
-#define PMf_EVAL 0x00008000 /* evaluating replacement as expr */
+/* don't reset pos() if //g fails */
+#define PMf_CONTINUE (1<<(_RXf_PMf_SHIFT+8))
+
+/* evaluating replacement as expr */
+#define PMf_EVAL (1<<(_RXf_PMf_SHIFT+9))
/* Return substituted string instead of modifying it. */
-#define PMf_NONDESTRUCT 0x00010000
+#define PMf_NONDESTRUCT (1<<(_RXf_PMf_SHIFT+10))
-/* The following flags have exact equivalents in regcomp.h with the prefix RXf_
- * which are stored in the regexp->extflags member. If you change them here,
- * you have to change them there, and vice versa.
- */
-#define PMf_MULTILINE 0x00000001 /* assume multiple lines */
-#define PMf_SINGLELINE 0x00000002 /* assume single line */
-#define PMf_FOLD 0x00000004 /* case insensitivity */
-#define PMf_EXTENDED 0x00000008 /* chuck embedded whitespace */
-#define PMf_KEEPCOPY 0x00000010 /* copy the string when matching */
-#define PMf_LOCALE 0x00000020 /* use locale for character types */
+#if _RXf_PMf_SHIFT+10 > 31
+# error Too many RXf_PMf bits used. See above and regnodes.h for any spare in middle
+#endif
/* mask of bits that need to be transfered to re->extflags */
#define PMf_COMPILETIME (PMf_MULTILINE|PMf_SINGLELINE|PMf_LOCALE|PMf_FOLD|PMf_EXTENDED|PMf_KEEPCOPY)