U32 lastcloseparen; /* last paren matched */
U32 reganch; /* Internal use only +
Tainted information used by regexec? */
- const struct regexp_engine* engine;
+ HV *paren_names; /* Paren names */
+ const struct regexp_engine* engine;
regnode program[1]; /* Unwarranted chumminess with compiler. */
} regexp;
typedef I32 CHECKPOINT;
typedef struct regmatch_state {
-
- /* these vars contain state that needs to be maintained
- * across the main while loop ... */
-
int resume_state; /* where to jump to on return */
- regnode *scan; /* Current node. */
- regnode *next; /* Next node. */
- bool minmod; /* the next "{n,m}" is a "{n,m}?" */
- bool sw; /* the condition value in (?(cond)a|b) */
- int logical;
- I32 unwind; /* savestack index of current unwind block */
- char *locinput;
-
- /* ... while the rest of these are local to an individual branch */
-
- I32 n; /* no or next */
- I32 ln; /* len or last */
+ char *locinput; /* where to backtrack in string on failure */
union {
/* this first element must match u.yes */
struct regmatch_state *prev_yes_state;
I32 wanted;
+ I32 logical; /* saved copy of 'logical' var */
regnode *me; /* the IFMATCH/SUSPEND/UNLESSM node */
} ifmatch; /* and SUSPEND/UNLESSM */
} u;