This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
remove some redundant code from CURLY rex ops
authorDavid Mitchell <davem@iabyn.com>
Sat, 26 May 2012 15:25:05 +0000 (16:25 +0100)
committerDavid Mitchell <davem@iabyn.com>
Wed, 13 Jun 2012 12:32:54 +0000 (13:32 +0100)
CURLY_B_*_fail all currently do:

    if (ST.paren && ST.count)
        rex->offs[ST.paren].end = -1;

but this is unnecessary. If B has just failed in the pattern /...(A)*B/,
then we will either adjust the amount of matched A, update rex->offs
(overwriting that -1) then call B again; or fail completely, do sayNO, and
backtrack to an op somewhere in the '...' before A. In this latter case,
the "somewhere else" op is the one responsible for unwinding the matched
parentheses, not us.

regexec.c

index 9de68a7..1c20c54 100644 (file)
--- a/regexec.c
+++ b/regexec.c
@@ -5438,8 +5438,6 @@ NULL
 
        case CURLY_B_min_known_fail:
            /* failed to find B in a non-greedy match where c1,c2 valid */
-           if (ST.paren && ST.count)
-               rex->offs[ST.paren].end = -1;
 
            PL_reginput = locinput;     /* Could be reset... */
            REGCP_UNWIND(ST.cp);
@@ -5516,8 +5514,6 @@ NULL
 
        case CURLY_B_min_fail:
            /* failed to find B in a non-greedy match where c1,c2 invalid */
-           if (ST.paren && ST.count)
-               rex->offs[ST.paren].end = -1;
 
            REGCP_UNWIND(ST.cp);
            /* failed -- move forward one */
@@ -5563,8 +5559,6 @@ NULL
            /* FALL THROUGH */
        case CURLY_B_max_fail:
            /* failed to find B in a greedy match */
-           if (ST.paren && ST.count)
-               rex->offs[ST.paren].end = -1;
 
            REGCP_UNWIND(ST.cp);
            /*  back up. */