Re: [PATCH++] Re: [PATCH] go faster for Encode's compile
[p5sagit/p5-mst-13.2.git] / regcomp.c
index 7e1e6bd..b453116 100644 (file)
--- a/regcomp.c
+++ b/regcomp.c
@@ -3193,6 +3193,8 @@ tryagain:
                                        s       += numlen;
                                        len     += numlen;
                                        foldbuf += numlen;
+                                       if (numlen >= foldlen)
+                                            break;
                                   }
                                   else
                                        break; /* "Can't happen." */
@@ -3221,9 +3223,11 @@ tryagain:
                               ender = utf8_to_uvchr(foldbuf, &numlen);
                               if (numlen > 0) {
                                    reguni(pRExC_state, ender, s, &numlen);
-                                   s       += numlen;
                                    len     += numlen;
+                                   s       += numlen;
                                    foldbuf += numlen;
+                                   if (numlen >= foldlen)
+                                        break;
                               }
                               else
                                    break;
@@ -3446,8 +3450,7 @@ S_regpposixcc(pTHX_ RExC_state_t *pRExC_state, I32 value)
 STATIC void
 S_checkposixcc(pTHX_ RExC_state_t *pRExC_state)
 {
-    if (!SIZE_ONLY && ckWARN(WARN_REGEXP) &&
-       POSIXCC(UCHARAT(RExC_parse))) {
+    if (!SIZE_ONLY && POSIXCC(UCHARAT(RExC_parse))) {
        char *s = RExC_parse;
        char  c = *s++;
 
@@ -3512,7 +3515,7 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state)
 
     nextvalue = RExC_parse < RExC_end ? UCHARAT(RExC_parse) : 0;
 
-    if (!SIZE_ONLY && ckWARN(WARN_REGEXP) && POSIXCC(nextvalue))
+    if (!SIZE_ONLY && POSIXCC(nextvalue))
        checkposixcc(pRExC_state);
 
     /* allow 1st char to be ] (allowing it to be - is dealt with later) */