Describe changes to Carp and Carp::Heavy
[p5sagit/p5-mst-13.2.git] / regexec.c
index 58d973a..f3c9540 100644 (file)
--- a/regexec.c
+++ b/regexec.c
@@ -4411,7 +4411,7 @@ NULL
        case CURLYM:    /* /A{m,n}B/ where A is fixed-length */
 
            /* This is an optimisation of CURLYX that enables us to push
-            * only a single backtracking state, no matter now many matches
+            * only a single backtracking state, no matter how many matches
             * there are in {m,n}. It relies on the pattern being constant
             * length, with no parens to influence future backrefs
             */
@@ -4478,8 +4478,11 @@ NULL
                cur_eval->u.eval.close_paren == (U32)ST.me->flags) 
                goto fake_end;
                
-           if ( ST.count < (ST.minmod ? ARG1(ST.me) : ARG2(ST.me)) )
-               goto curlym_do_A; /* try to match another A */
+           {
+               I32 max = (ST.minmod ? ARG1(ST.me) : ARG2(ST.me));
+               if ( max == REG_INFTY || ST.count < max )
+                   goto curlym_do_A; /* try to match another A */
+           }
            goto curlym_do_B; /* try to match B */
 
        case CURLYM_A_fail: /* just failed to match an A */
@@ -4571,7 +4574,8 @@ NULL
        case CURLYM_B_fail: /* just failed to match a B */
            REGCP_UNWIND(ST.cp);
            if (ST.minmod) {
-               if (ST.count == ARG2(ST.me) /* max */)
+               I32 max = ARG2(ST.me);
+               if (max != REG_INFTY && ST.count == max)
                    sayNO;
                goto curlym_do_A; /* try to match a further A */
            }