[perl #43159] 5.9.4 regexp capturing wrongly
Dave Mitchell [Mon, 18 Jun 2007 15:10:32 +0000 (15:10 +0000)]
change #28398 accidently made the last branch of an alternation
not restore the paren state after failure backtrack. Fix this by
removing the last-branch-skips-pushing-a-state optimisation.
p4raw-link: @28398 on //depot/perl: 40a824489101168f94fce98aa2824baf40bad402

p4raw-id: //depot/perl@31417

regexec.c
t/op/re_tests

index b05a177..a4c5aee 100644 (file)
--- a/regexec.c
+++ b/regexec.c
@@ -4219,12 +4219,6 @@ NULL
 
        case BRANCH:        /*  /(...|A|...)/ */
            scan = NEXTOPER(scan); /* scan now points to inner node */
-           if ((!next || (OP(next) != BRANCH && OP(next) != BRANCHJ)) 
-               && !has_cutgroup)
-           {
-               /* last branch; skip state push and jump direct to node */
-               continue;
-            }
            ST.lastparen = *PL_reglastparen;
            ST.next_branch = next;
            REGCP_SET(ST.cp);
index 13f0693..f4dca6e 100644 (file)
@@ -1327,3 +1327,4 @@ foo(\h)bar        foo\tbar        y       $1      \t
 
 .*\z   foo\n   y       -       -
 ^(?:(\d)x)?\d$ 1       y       ${\(defined($1)?1:0)}   0       
+.*?(?:(\w)|(\w))x      abx     y       $1-$2   b-