summaryrefslogtreecommitdiff
path: root/regexp.h
diff options
context:
space:
mode:
authorYves Orton <demerphq@gmail.com>2007-02-01 18:06:37 +0100
committerSteve Peters <steve@fisharerojo.org>2007-02-03 06:25:11 +0000
commitfae667d5a60f37538a5761795f7af2165c7d4fb0 (patch)
tree2330f8756ac2cf6a6c343d54eb76170a2fb170af /regexp.h
parent77348331ba668328554e7a9d261f69ef327189e7 (diff)
downloadperl-fae667d5a60f37538a5761795f7af2165c7d4fb0.tar.gz
Re: prerelease checklist for Perl 5.10
Date: Thu, 1 Feb 2007 17:06:37 +0100 Message-ID: <9b18b3110702010806n7e095317v77f5dc1eb765f8d@mail.gmail.com> Subject: Re: prerelease checklist for Perl 5.10 From: demerphq <demerphq@gmail.com> Date: Fri, 2 Feb 2007 18:10:14 +0100 Message-ID: <9b18b3110702020910l31c7784fi5e37bf777b6eafb3@mail.gmail.com> Regular expression changes to fix failing tests in XML::Twig and Mail::SpamAssassin. The breakages occured in changes #28785 and #29279. p4raw-id: //depot/perl@30104
Diffstat (limited to 'regexp.h')
-rw-r--r--regexp.h78
1 files changed, 49 insertions, 29 deletions
diff --git a/regexp.h b/regexp.h
index 0bf886bf2e..d43f05f2d1 100644
--- a/regexp.h
+++ b/regexp.h
@@ -310,16 +310,41 @@ typedef struct regmatch_state {
struct regmatch_state *prev_yes_state;
} yes;
- struct {
+ /* branchlike members */
+ /* this is a fake union member that matches the first elements
+ * of each member that needs to behave like a branch */
+ struct {
/* this first element must match u.yes */
struct regmatch_state *prev_yes_state;
- reg_trie_accepted *accept_buff;
+ U32 lastparen;
+ CHECKPOINT cp;
+
+ } branchlike;
+
+ struct {
+ /* the first elements must match u.branchlike */
+ struct regmatch_state *prev_yes_state;
+ U32 lastparen;
+ CHECKPOINT cp;
+
+ regnode *next_branch; /* next branch node */
+ } branch;
+
+ struct {
+ /* the first elements must match u.branchlike */
+ struct regmatch_state *prev_yes_state;
+ U32 lastparen;
+ CHECKPOINT cp;
+
+ reg_trie_accepted *accept_buff; /* accepting states we have seen */
U32 accepted; /* how many accepting states we have seen */
U16 *jump; /* positive offsets from me */
regnode *B; /* node following the trie */
regnode *me; /* Which node am I - needed for jump tries*/
} trie;
+ /* special types - these members are used to store state for special
+ regops like eval, if/then, lookaround and the markpoint state */
struct {
/* this first element must match u.yes */
struct regmatch_state *prev_yes_state;
@@ -338,6 +363,28 @@ typedef struct regmatch_state {
struct {
/* 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 */
+
+ struct {
+ /* this first element must match u.yes */
+ struct regmatch_state *prev_yes_state;
+ struct regmatch_state *prev_mark;
+ SV* mark_name;
+ char *mark_loc;
+ } mark;
+
+ struct {
+ int val;
+ } keeper;
+
+ /* quantifiers - these members are used for storing state for
+ for the regops used to implement quantifiers */
+ struct {
+ /* this first element must match u.yes */
+ struct regmatch_state *prev_yes_state;
struct regmatch_state *prev_curlyx; /* previous cur_curlyx */
CHECKPOINT cp; /* remember current savestack index */
bool minmod;
@@ -365,14 +412,6 @@ typedef struct regmatch_state {
struct {
/* this first element must match u.yes */
struct regmatch_state *prev_yes_state;
- U32 lastparen;
- regnode *next_branch; /* next branch node */
- CHECKPOINT cp;
- } branch;
-
- struct {
- /* this first element must match u.yes */
- struct regmatch_state *prev_yes_state;
I32 c1, c2; /* case fold search */
CHECKPOINT cp;
I32 alen; /* length of first-matched A string */
@@ -393,25 +432,6 @@ typedef struct regmatch_state {
regnode *A, *B; /* the nodes corresponding to /A*B/ */
} curly; /* and CURLYN/PLUS/STAR */
- struct {
- /* 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 */
-
- struct {
- /* this first element must match u.yes */
- struct regmatch_state *prev_yes_state;
- struct regmatch_state *prev_mark;
- SV* mark_name;
- char *mark_loc;
- } mark;
-
- struct {
- int val;
- } keeper;
} u;
} regmatch_state;