diff options
author | Hugo van der Sanden <hv@crypt.org> | 2003-07-31 19:59:43 +0100 |
---|---|---|
committer | Jarkko Hietaniemi <jhi@iki.fi> | 2003-07-31 19:57:36 +0000 |
commit | b0e70d55183e72f46527dd222872eff0e4a92c42 (patch) | |
tree | 0360b624f6615d0d58b78220efe7cb9238d57269 /regexec.c | |
parent | 1ef57a5cc2e49e0fc5bdab2d40bc9f1dd2983a4e (diff) | |
download | perl-b0e70d55183e72f46527dd222872eff0e4a92c42.tar.gz |
Re: [perl #23171] Regex too selfish
Message-Id: <200307311759.h6VHxhn06664@zen.crypt.org>
(choose the second code patch)
p4raw-id: //depot/perl@20387
Diffstat (limited to 'regexec.c')
-rw-r--r-- | regexec.c | 10 |
1 files changed, 10 insertions, 0 deletions
@@ -3351,6 +3351,7 @@ S_regmatch(pTHX_ regnode *prog) { I32 l = 0; CHECKPOINT lastcp; + I32 lparen = *PL_reglastparen; /* We suppose that the next guy does not need backtracking: in particular, it is of constant length, @@ -3435,6 +3436,8 @@ S_regmatch(pTHX_ regnode *prog) } if (regmatch(next)) sayYES; + /* t/op/regexp.t test 885 fails if this is performed */ + /* *PL_reglastparen = lparen; */ REGCP_UNWIND(lastcp); } /* Couldn't or didn't -- move forward. */ @@ -3522,6 +3525,7 @@ S_regmatch(pTHX_ regnode *prog) } if (regmatch(next)) sayYES; + *PL_reglastparen = lparen; REGCP_UNWIND(lastcp); } /* Couldn't or didn't -- back up. */ @@ -3634,6 +3638,7 @@ S_regmatch(pTHX_ regnode *prog) PL_reginput = locinput; if (minmod) { CHECKPOINT lastcp; + I32 lparen = *PL_reglastparen; minmod = 0; if (ln && regrepeat(scan, ln) < ln) sayNO; @@ -3740,6 +3745,7 @@ S_regmatch(pTHX_ regnode *prog) if (c == (UV)c1 || c == (UV)c2) { TRYPAREN(paren, ln, PL_reginput); + *PL_reglastparen = lparen; REGCP_UNWIND(lastcp); } } @@ -3747,6 +3753,7 @@ S_regmatch(pTHX_ regnode *prog) else if (c1 == -1000) { TRYPAREN(paren, ln, PL_reginput); + *PL_reglastparen = lparen; REGCP_UNWIND(lastcp); } /* Couldn't or didn't -- move forward. */ @@ -3761,6 +3768,7 @@ S_regmatch(pTHX_ regnode *prog) } else { CHECKPOINT lastcp; + I32 lparen = *PL_reglastparen; n = regrepeat(scan, n); locinput = PL_reginput; if (ln < n && PL_regkind[(U8)OP(next)] == EOL && @@ -3791,6 +3799,7 @@ S_regmatch(pTHX_ regnode *prog) if (c1 == -1000 || c == (UV)c1 || c == (UV)c2) { TRYPAREN(paren, n, PL_reginput); + *PL_reglastparen = lparen; REGCP_UNWIND(lastcp); } /* Couldn't or didn't -- back up. */ @@ -3814,6 +3823,7 @@ S_regmatch(pTHX_ regnode *prog) if (c1 == -1000 || c == (UV)c1 || c == (UV)c2) { TRYPAREN(paren, n, PL_reginput); + *PL_reglastparen = lparen; REGCP_UNWIND(lastcp); } /* Couldn't or didn't -- back up. */ |