This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
regexp.h: no subbeg move when reordering regexp struct
[perl5.git] / regexp.h
index 1c18e1d..59fa1b8 100644 (file)
--- a/regexp.h
+++ b/regexp.h
@@ -118,28 +118,37 @@ typedef struct regexp {
      */
 
     U32 extflags;      /* Flags used both externally and internally */
+    U32 nparens;       /* number of capture buffers */
     SSize_t minlen;    /* minimum possible number of chars in string to match */
     SSize_t minlenret; /* mininum possible number of chars in $& */
     STRLEN gofs;       /* chars left of pos that we search from */
                        /* substring data about strings that must appear in
                         * the final match, used for optimisations */
     struct reg_substr_data *substrs;
-    U32 nparens;       /* number of capture buffers */
 
     /* private engine specific data */
 
-    U32 intflags;      /* Engine Specific Internal flags */
     void *pprivate;    /* Data private to the regex engine which
                         * created this object. */
+    U32 intflags;      /* Engine Specific Internal flags */
 
     /*----------------------------------------------------------------------
      * Data about the last/current match. These are modified during matching
      */
 
     U32 lastparen;           /* highest close paren matched ($+) */
-    U32 lastcloseparen;      /* last close paren matched ($^N) */
     regexp_paren_pair *offs; /* Array of offsets for (@-) and (@+) */
     char **recurse_locinput; /* used to detect infinite recursion, XXX: move to internal */
+    U32 lastcloseparen;      /* last close paren matched ($^N) */
+
+    /*---------------------------------------------------------------------- */
+
+    /* offset from wrapped to the start of precomp */
+    PERL_BITFIELD32 pre_prefix:4;
+
+    /* original flags used to compile the pattern, may differ from
+     * extflags in various ways */
+    PERL_BITFIELD32 compflags:9;
 
     /*---------------------------------------------------------------------- */
 
@@ -148,21 +157,10 @@ typedef struct regexp {
     SSize_t sublen;     /* Length of string pointed by subbeg */
     SSize_t suboffset;  /* byte offset of subbeg from logical start of str */
     SSize_t subcoffset; /* suboffset equiv, but in chars (for @-/@+) */
-
-    /* Information about the match that isn't often used */
-
     SSize_t maxlen;  /* minimum possible number of chars in string to match */
 
     /*---------------------------------------------------------------------- */
 
-    /* offset from wrapped to the start of precomp */
-    PERL_BITFIELD32 pre_prefix:4;
-
-    /* original flags used to compile the pattern, may differ from
-     * extflags in various ways */
-    PERL_BITFIELD32 compflags:9;
-
-    /*---------------------------------------------------------------------- */
 
     CV *qr_anoncv;      /* the anon sub wrapped round qr/(?{..})/ */
 } regexp;
@@ -629,7 +627,7 @@ and check for NULL.
 #  define ReREFCNT_dec(re)     SvREFCNT_dec(re)
 #  define ReREFCNT_inc(re)     ((REGEXP *) SvREFCNT_inc(re))
 #endif
-#define ReANY(re)              S_ReANY((const REGEXP *)(re))
+#define ReANY(re)              Perl_ReANY((const REGEXP *)(re))
 
 /* FIXME for plugins. */
 
@@ -658,6 +656,7 @@ typedef struct {
     STRLEN  sublen;     /* saved sublen     field from rex */
     STRLEN  suboffset;  /* saved suboffset  field from rex */
     STRLEN  subcoffset; /* saved subcoffset field from rex */
+    SV      *sv;        /* $_  during (?{}) */
     MAGIC   *pos_magic; /* pos() magic attached to $_ */
     SSize_t pos;        /* the original value of pos() in pos_magic */
     U8      pos_flags;  /* flags to be restored; currently only MGf_BYTES*/
@@ -714,6 +713,8 @@ typedef I32 CHECKPOINT;
 typedef struct regmatch_state {
     int resume_state;          /* where to jump to on return */
     char *locinput;            /* where to backtrack in string on failure */
+    char *loceol;
+    U8 *sr0;                    /* position of start of script run, or NULL */
 
     union {
 
@@ -806,6 +807,9 @@ typedef struct regmatch_state {
            struct regmatch_state *prev_yes_state;
            I32 wanted;
            I32 logical;        /* saved copy of 'logical' var */
+            U8  count;          /* number of beginning positions */
+            char *start;
+            char *end;
            regnode  *me; /* the IFMATCH/SUSPEND/UNLESSM node  */
        } ifmatch; /* and SUSPEND/UNLESSM */