This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Just sorting to guarantee order is not enough.
[perl5.git] / regcomp.h
index b9542c9..16cf957 100644 (file)
--- a/regcomp.h
+++ b/regcomp.h
@@ -286,6 +286,14 @@ struct regnode_charclass_class {   /* has [[:blah:]] classes */
 #define ANYOF_BITMAP_CLEAR(p,c)        (ANYOF_BITMAP_BYTE(p, c) &= ~ANYOF_BIT(c))
 #define ANYOF_BITMAP_TEST(p, c)        (ANYOF_BITMAP_BYTE(p, c) &   ANYOF_BIT(c))
 
+#define ANYOF_BITMAP_SETALL(p)         \
+       memset (ANYOF_BITMAP(p), 255, ANYOF_BITMAP_SIZE)
+#define ANYOF_BITMAP_CLEARALL(p)       \
+       Zero (ANYOF_BITMAP(p), ANYOF_BITMAP_SIZE)
+/* Check that all 256 bits are all set.  Used in S_cl_is_anything()  */
+#define ANYOF_BITMAP_TESTALLSET(p)     \
+       memEQ (ANYOF_BITMAP(p), "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377", ANYOF_BITMAP_SIZE)
+
 #define ANYOF_SKIP             ((ANYOF_SIZE - 1)/sizeof(regnode))
 #define ANYOF_CLASS_SKIP       ((ANYOF_CLASS_SIZE - 1)/sizeof(regnode))
 #define ANYOF_CLASS_ADD_SKIP   (ANYOF_CLASS_SKIP - ANYOF_SKIP)
@@ -309,7 +317,8 @@ struct regnode_charclass_class {    /* has [[:blah:]] classes */
 #define REG_SEEN_LOOKBEHIND     2
 #define REG_SEEN_GPOS           4
 #define REG_SEEN_EVAL           8
-#define REG_SEEN_SANY          16
+#define REG_SEEN_CANY          16
+#define REG_SEEN_SANY          REG_SEEN_CANY /* src bckwrd cmpt */
 
 START_EXTERN_C
 
@@ -331,7 +340,7 @@ EXTCONST U8 PL_varies[] = {
 EXTCONST U8 PL_simple[];
 #else
 EXTCONST U8 PL_simple[] = {
-    REG_ANY,   SANY,
+    REG_ANY,   SANY,   CANY,
     ANYOF,
     ALNUM,     ALNUML,
     NALNUM,    NALNUML,
@@ -350,6 +359,16 @@ typedef struct re_scream_pos_data_s
     I32 *scream_pos;           /* Internal iterator of scream. */
 } re_scream_pos_data;
 
+/* .what is a character array with one character for each member of .data
+ * The character describes the function of the corresponding .data item:
+ *   f - start-class data for regstclass optimization  
+ *   n - Root of op tree for (?{EVAL}) item
+ *   o - Start op for (?{EVAL}) item
+ *   p - Pad for (?{EVAL} item
+ *   s - swash for unicode-style character class
+ * 20010712 mjd@plover.com
+ * (Remember to update re_dup() and pregfree() if you add any items.)
+ */
 struct reg_data {
     U32 count;
     U8 *what;