X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/fd1dd2eb05554dea51a1d125b5dfcea0f028a583..4a1bbd3d3953c431bae9be4cc821f240490d81a6:/regexp.h?ds=sidebyside diff --git a/regexp.h b/regexp.h index 9d43083..e12c6a9 100644 --- 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*/ @@ -715,6 +714,7 @@ 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 { @@ -807,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 */ @@ -823,7 +826,7 @@ typedef struct regmatch_state { } keeper; /* quantifiers - these members are used for storing state for - for the regops used to implement quantifiers */ + the regops used to implement quantifiers */ struct { /* this first element must match u.yes */ struct regmatch_state *prev_yes_state;