diff options
Diffstat (limited to 'Master/tlpkg/tlperl/lib/CORE/regexp.h')
-rw-r--r-- | Master/tlpkg/tlperl/lib/CORE/regexp.h | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/Master/tlpkg/tlperl/lib/CORE/regexp.h b/Master/tlpkg/tlperl/lib/CORE/regexp.h index 04eeba9c9e5..78aa899625e 100644 --- a/Master/tlpkg/tlperl/lib/CORE/regexp.h +++ b/Master/tlpkg/tlperl/lib/CORE/regexp.h @@ -102,6 +102,7 @@ struct reg_code_block { const struct regexp_engine* engine; \ REGEXP *mother_re; /* what re is this a lightweight copy of? */ \ HV *paren_names; /* Optional hash of paren names */ \ + /*--------------------------------------------------------*/ \ /* Information about the match that the perl core uses to */ \ /* manage things */ \ U32 extflags; /* Flags used both externally and internally */ \ @@ -116,12 +117,15 @@ struct reg_code_block { U32 intflags; /* Engine Specific Internal flags */ \ void *pprivate; /* Data private to the regex engine which */ \ /* created this object. */ \ + /*--------------------------------------------------------*/ \ /* Data about the last/current match. These are modified */ \ /* during matching */ \ U32 lastparen; /* last open paren matched */ \ U32 lastcloseparen; /* last close paren matched */ \ /* Array of offsets for (@-) and (@+) */ \ regexp_paren_pair *offs; \ + char **recurse_locinput; /* used to detect infinite recursion, XXX: move to internal */ \ + /*--------------------------------------------------------*/ \ /* saved or original string so \digit works forever. */ \ char *subbeg; \ SV_SAVED_COPY /* If non-NULL, SV which is COW from original */\ @@ -130,11 +134,13 @@ struct reg_code_block { SSize_t subcoffset; /* suboffset equiv, but in chars (for @-/@+) */ \ /* Information about the match that isn't often used */ \ SSize_t maxlen; /* mininum 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/(?{..})/ */ typedef struct regexp { @@ -168,7 +174,7 @@ typedef struct regexp_engine { const U32 flags, re_scream_pos_data *data); SV* (*checkstr) (pTHX_ REGEXP * const rx); - void (*free) (pTHX_ REGEXP * const rx); + void (*rxfree) (pTHX_ REGEXP * const rx); void (*numbered_buff_FETCH) (pTHX_ REGEXP * const rx, const I32 paren, SV * const sv); void (*numbered_buff_STORE) (pTHX_ REGEXP * const rx, const I32 paren, @@ -242,7 +248,7 @@ equivalent to the following snippet: if (SvTYPE(sv) == SVt_REGEXP) return (REGEXP*) sv; -NULL will be returned if a REGEXP* is not found. +C<NULL> will be returned if a REGEXP* is not found. =for apidoc Am|bool|SvRXOK|SV* sv @@ -657,7 +663,7 @@ typedef struct { /* structures for holding and saving the state maintained by regmatch() */ #ifndef MAX_RECURSE_EVAL_NOCHANGE_DEPTH -#define MAX_RECURSE_EVAL_NOCHANGE_DEPTH 1000 +#define MAX_RECURSE_EVAL_NOCHANGE_DEPTH 10 #endif typedef I32 CHECKPOINT; @@ -742,13 +748,14 @@ typedef struct regmatch_state { struct { /* this first element must match u.yes */ struct regmatch_state *prev_yes_state; - struct regmatch_state *prev_eval; struct regmatch_state *prev_curlyx; + struct regmatch_state *prev_eval; REGEXP *prev_rex; CHECKPOINT cp; /* remember current savestack indexes */ CHECKPOINT lastcp; - U32 close_paren; /* which close bracket is our end */ + U32 close_paren; /* which close bracket is our end (+1) */ regnode *B; /* the node following us */ + char *prev_recurse_locinput; } eval; struct { @@ -833,6 +840,8 @@ typedef struct regmatch_state { } u; } regmatch_state; + + /* how many regmatch_state structs to allocate as a single slab. * We do it in 4K blocks for efficiency. The "3" is 2 for the next/prev * pointers, plus 1 for any mythical malloc overhead. */ |