Hugo's second thoughts: drop the relatively rare and
Jarkko Hietaniemi [Fri, 1 Aug 2003 22:00:30 +0000 (22:00 +0000)]
slow optimization for now.

p4raw-id: //depot/perl@20437

regexec.c

index 961611b..df96924 100644 (file)
--- a/regexec.c
+++ b/regexec.c
@@ -3351,7 +3351,6 @@ 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,
@@ -3391,19 +3390,8 @@ S_regmatch(pTHX_ regnode *prog)
                    if (! HAS_TEXT(text_node)) c1 = c2 = -1000;
                    else {
                        if (PL_regkind[(U8)OP(text_node)] == REF) {
-                           I32 n, ln;
-                           n = ARG(text_node);  /* which paren pair */
-                           ln = PL_regstartp[n];
-                           /* assume yes if we haven't seen CLOSEn */
-                           if (
-                               (I32)*PL_reglastparen < n ||
-                               ln == -1 ||
-                               ln == PL_regendp[n]
-                           ) {
-                               c1 = c2 = -1000;
-                               goto assume_ok_MM;
-                           }
-                           c1 = *(PL_bostr + ln);
+                           c1 = c2 = -1000;
+                           goto assume_ok_MM;
                        }
                        else { c1 = (U8)*STRING(text_node); }
                        if (OP(text_node) == EXACTF || OP(text_node) == REFF)
@@ -3436,8 +3424,6 @@ 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. */
@@ -3475,19 +3461,8 @@ S_regmatch(pTHX_ regnode *prog)
                        if (! HAS_TEXT(text_node)) c1 = c2 = -1000;
                        else {
                            if (PL_regkind[(U8)OP(text_node)] == REF) {
-                               I32 n, ln;
-                               n = ARG(text_node);  /* which paren pair */
-                               ln = PL_regstartp[n];
-                               /* assume yes if we haven't seen CLOSEn */
-                               if (
-                                   (I32)*PL_reglastparen < n ||
-                                   ln == -1 ||
-                                   ln == PL_regendp[n]
-                               ) {
-                                   c1 = c2 = -1000;
-                                   goto assume_ok_REG;
-                               }
-                               c1 = *(PL_bostr + ln);
+                               c1 = c2 = -1000;
+                               goto assume_ok_REG;
                            }
                            else { c1 = (U8)*STRING(text_node); }
 
@@ -3525,7 +3500,6 @@ S_regmatch(pTHX_ regnode *prog)
                        }
                        if (regmatch(next))
                            sayYES;
-                       *PL_reglastparen = lparen;
                        REGCP_UNWIND(lastcp);
                    }
                    /* Couldn't or didn't -- back up. */
@@ -3585,19 +3559,8 @@ S_regmatch(pTHX_ regnode *prog)
                if (! HAS_TEXT(text_node)) c1 = c2 = -1000;
                else {
                    if (PL_regkind[(U8)OP(text_node)] == REF) {
-                       I32 n, ln;
-                       n = ARG(text_node);  /* which paren pair */
-                       ln = PL_regstartp[n];
-                       /* assume yes if we haven't seen CLOSEn */
-                       if (
-                           (I32)*PL_reglastparen < n ||
-                           ln == -1 ||
-                           ln == PL_regendp[n]
-                       ) {
-                           c1 = c2 = -1000;
-                           goto assume_ok_easy;
-                       }
-                       s = (U8*)PL_bostr + ln;
+                       c1 = c2 = -1000;
+                       goto assume_ok_easy;
                    }
                    else { s = (U8*)STRING(text_node); }
 
@@ -3638,7 +3601,6 @@ 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;
@@ -3745,7 +3707,6 @@ S_regmatch(pTHX_ regnode *prog)
                        if (c == (UV)c1 || c == (UV)c2)
                        {
                            TRYPAREN(paren, ln, PL_reginput);
-                           *PL_reglastparen = lparen;
                            REGCP_UNWIND(lastcp);
                        }
                    }
@@ -3753,7 +3714,6 @@ 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. */
@@ -3768,7 +3728,6 @@ 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 &&
@@ -3799,7 +3758,6 @@ 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. */
@@ -3823,7 +3781,6 @@ 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. */