Improve regex debug output for unbounded curly quantifiers blead
authorAaron Crane <arc@cpan.org>
Mon, 31 Aug 2015 18:50:45 +0000 (19:50 +0100)
committerAaron Crane <arc@cpan.org>
Mon, 31 Aug 2015 18:50:45 +0000 (19:50 +0100)
A regex like /^a{5,}\z/ will match any string consisting exactly of 5 or
more "a" characters, but under debugging, the quantifier was previously
displayed as the numeric value of REG_INFTY (usually 32767). This commit
causes the upper bound to be displayed as "INFTY".

regcomp.c

index 3fbf8bf..9a2ccff 100644 (file)
--- a/regcomp.c
+++ b/regcomp.c
@@ -17002,9 +17002,15 @@ Perl_regprop(pTHX_ const regexp *prog, SV *sv, const regnode *o, const regmatch_
         }
 
     } else if (k == CURLY) {
+        U32 lo = ARG1(o), hi = ARG2(o);
        if (OP(o) == CURLYM || OP(o) == CURLYN || OP(o) == CURLYX)
            Perl_sv_catpvf(aTHX_ sv, "[%d]", o->flags); /* Parenth number */
-       Perl_sv_catpvf(aTHX_ sv, " {%d,%d}", ARG1(o), ARG2(o));
+        Perl_sv_catpvf(aTHX_ sv, "{%d,", lo);
+        if (hi == REG_INFTY)
+            sv_catpvs(sv, "INFTY");
+        else
+            Perl_sv_catpvf(aTHX_ sv, "%d", hi);
+        sv_catpvs(sv, "}");
     }
     else if (k == WHILEM && o->flags)                  /* Ordinal/of */
        Perl_sv_catpvf(aTHX_ sv, "[%d/%d]", o->flags & 0xf, o->flags>>4);