optimisation in Perl_regdupe. */
struct _reg_trie_data {
U32 refcount; /* number of times this trie is referenced */
- U16 uniquecharcount; /* unique chars in trie (width of trans table) */
U32 lasttrans; /* last valid transition element */
U16 *charmap; /* byte to charid lookup array */
reg_trie_state *states; /* state data */
reg_trie_trans *trans; /* array of transition elements */
char *bitmap; /* stclass bitmap */
- U32 startstate; /* initial state - used for common prefix optimisation */
- STRLEN minlen; /* minimum length of words in trie - build/opt only? */
- STRLEN maxlen; /* maximum length of words in trie - build/opt only? */
U32 *wordlen; /* array of lengths of words */
U16 *jump; /* optional 1 indexed array of offsets before tail
for the node following a given word. */
U16 *nextword; /* optional 1 indexed array to support linked list
of duplicate wordnums */
+ U16 uniquecharcount; /* unique chars in trie (width of trans table) */
+ U32 startstate; /* initial state - used for common prefix optimisation */
+ STRLEN minlen; /* minimum length of words in trie - build/opt only? */
+ STRLEN maxlen; /* maximum length of words in trie - build/opt only? */
U32 statecount; /* Build only - number of states in the states array
(including the unused zero state) */
U32 wordcount; /* Build only */
optimisation in Perl_regdupe. */
struct _reg_ac_data {
U32 refcount;
+ U32 trie;
U32 *fail;
reg_trie_state *states;
- U32 trie;
};
typedef struct _reg_ac_data reg_ac_data;
char *subbeg; /* saved or original string
so \digit works forever. */
- I32 sublen; /* Length of string pointed by subbeg */
SV_SAVED_COPY /* If non-NULL, SV which is COW from original */
+ I32 sublen; /* Length of string pointed by subbeg */
/* Information about the match that isn't often used */
- const char *precomp; /* pre-compilation regular expression */
I32 prelen; /* length of precomp */
+ const char *precomp; /* pre-compilation regular expression */
/* wrapped can't be const char*, as it is returned by sv_2pv_flags */
char *wrapped; /* wrapped version of the pattern */
I32 wraplen; /* length of wrapped */
inner and outer rexen */
CHECKPOINT cp; /* remember current savestack indexes */
CHECKPOINT lastcp;
- regnode *B; /* the node following us */
U32 close_paren; /* which close bracket is our end */
+ regnode *B; /* the node following us */
} eval;
struct {
/* this first element must match u.yes */
struct regmatch_state *prev_yes_state;
struct regmatch_state *prev_curlyx; /* previous cur_curlyx */
+ regnode *A, *B; /* the nodes corresponding to /A*B/ */
CHECKPOINT cp; /* remember current savestack index */
bool minmod;
int parenfloor;/* how far back to strip paren data */
int min; /* the minimal number of A's to match */
int max; /* the maximal number of A's to match */
- regnode *A, *B; /* the nodes corresponding to /A*B/ */
/* these two are modified by WHILEM */
int count; /* how many instances of A we've matched */
struct re_save_state {
U32 re_state_reg_flags; /* from regexec.c */
+ U32 re_state_reg_start_tmpl; /* from regexec.c */
+ I32 re_state_reg_eval_set; /* from regexec.c */
+ bool re_state_reg_match_utf8; /* from regexec.c */
char *re_state_bostr;
char *re_state_reginput; /* String-input pointer. */
char *re_state_regeol; /* End of input, for $ check. */
U32 *re_state_reglastparen; /* Similarly for lastparen. */
U32 *re_state_reglastcloseparen; /* Similarly for lastcloseparen. */
char **re_state_reg_start_tmp; /* from regexec.c */
- U32 re_state_reg_start_tmpl; /* from regexec.c */
- I32 re_state_reg_eval_set; /* from regexec.c */
- bool re_state_reg_match_utf8; /* from regexec.c */
MAGIC *re_state_reg_magic; /* from regexec.c */
- I32 re_state_reg_oldpos; /* from regexec.c */
PMOP *re_state_reg_oldcurpm; /* from regexec.c */
PMOP *re_state_reg_curpm; /* from regexec.c */
char *re_state_reg_oldsaved; /* old saved substr during match */
STRLEN re_state_reg_oldsavedlen; /* old length of saved substr during match */
+ STRLEN re_state_reg_poscache_size; /* size of pos cache of WHILEM */
+ I32 re_state_reg_oldpos; /* from regexec.c */
I32 re_state_reg_maxiter; /* max wait until caching pos */
I32 re_state_reg_leftiter; /* wait until caching pos */
- char *re_state_reg_poscache; /* cache of pos of WHILEM */
- STRLEN re_state_reg_poscache_size; /* size of pos cache of WHILEM */
U32 re_state_regsize; /* from regexec.c */
+ char *re_state_reg_poscache; /* cache of pos of WHILEM */
char *re_state_reg_starttry; /* from regexec.c */
#ifdef PERL_OLD_COPY_ON_WRITE
SV *re_state_nrs; /* was placeholder: unused since 5.8.0 (5.7.2 patch #12027 for bug ID 20010815.012). Used to save rx->saved_copy */