Re: Named-capture regex syntax
[p5sagit/p5-mst-13.2.git] / regcomp.h
index 1075080..7df47d3 100644 (file)
--- a/regcomp.h
+++ b/regcomp.h
@@ -92,11 +92,25 @@ typedef OP OP_4tree;                        /* Will be redefined later. */
  * special test to reverse the sign of BACK pointers since the offset is
  * stored negative.]
  */
-typedef struct regexp_internal {
-        regexp_paren_ofs *swap; /* Swap copy of *startp / *endp */
+
+/* This is the stuff that used to live in regexp.h that was truly
+   private to the engine itself. It now lives here. */
+
+/* swap buffer for paren structs */
+typedef struct regexp_paren_ofs {
+    I32 *startp;
+    I32 *endp;
+} regexp_paren_ofs;
+
+ typedef struct regexp_internal {
+#ifdef DEBUGGING
+        int name_list_idx;     /* Optional data index of an array of paren names */
+#endif
+
        U32 *offsets;           /* offset annotations 20001228 MJD 
                                    data about mapping the program to the 
                                    string*/
+        regexp_paren_ofs *swap; /* Swap copy of *startp / *endp */                                   
         regnode *regstclass;    /* Optional startclass as identified or constructed
                                    by the optimiser */
         struct reg_data *data; /* Additional miscellaneous data used by the program.
@@ -109,6 +123,20 @@ typedef struct regexp_internal {
 #define RXi_SET(x,y) (x)->pprivate = (void*)(y)   
 #define RXi_GET(x)   ((regexp_internal *)((x)->pprivate))
 #define RXi_GET_DECL(r,ri) regexp_internal *ri = RXi_GET(r)
+/*
+ * Flags stored in regexp->intflags
+ * These are used only internally to the regexp engine
+ *
+ * See regexp.h for flags used externally to the regexp engine
+ */
+#define PREGf_SKIP             0x00000001
+#define PREGf_IMPLICIT         0x00000002 /* Converted .* to ^.* */
+#define PREGf_NAUGHTY          0x00000004 /* how exponential is this pattern? */
+#define PREGf_VERBARG_SEEN     0x00000008
+#define PREGf_CUTGROUP_SEEN    0x00000010
+
+
+/* this is where the old regcomp.h started */
 
 struct regnode_string {
     U8 str_len;
@@ -460,18 +488,8 @@ struct reg_data {
     void* data[1];
 };
 
-struct reg_substr_datum {
-    I32 min_offset;
-    I32 max_offset;
-    SV *substr;                /* non-utf8 variant */
-    SV *utf8_substr;   /* utf8 variant */
-    I32 end_shift;
-};
-
-struct reg_substr_data {
-    struct reg_substr_datum data[3];   /* Actual array */
-};
-
+/* Code in S_to_utf8_substr() and S_to_byte_substr() in regexec.c accesses
+   anchored* and float* via array indexes 0 and 1.  */
 #define anchored_substr substrs->data[0].substr
 #define anchored_utf8 substrs->data[0].utf8_substr
 #define anchored_offset substrs->data[0].min_offset