Get back into sync with Jeffrey on the enhanced regex warnings.
Jarkko Hietaniemi [Thu, 10 Aug 2000 12:55:16 +0000 (12:55 +0000)]
p4raw-id: //depot/perl@6563

pod/perldiag.pod
regcomp.c
t/op/re_tests
t/op/readdir.t

index c20d71d..83a02b2 100644 (file)
@@ -3431,13 +3431,14 @@ iterating over it, and someone else stuck a message in the stream of
 data Perl expected.  Someone's very confused, or perhaps trying to
 subvert Perl's population of %ENV for nefarious purposes.
 
-=item unmatched [] in regexp
+=item unmatched [ at <HERE< mark in regex m/%s/
 
-(F) The brackets around a character class must match.  If you wish to
+(F) The brackets around a character class must match. If you wish to
 include a closing bracket in a character class, backslash it or put it
-first.  See L<perlre>.
+first. See L<perlre>. The <HERE< shows in the regular expression about
+where the escape was discovered.
 
-=item unmatched () in regexp
+=item unmatched ( in regexp at <HERE< mark in regex m/%s/
 
 (F) Unbackslashed parentheses must always be balanced in regular
 expressions.  If you're a vi user, the % key is valuable for finding the
index fd4633b..2da9911 100644 (file)
--- a/regcomp.c
+++ b/regcomp.c
@@ -2190,14 +2190,14 @@ S_reg(pTHX_ I32 paren, I32 *flagp)
     if (paren) {
        PL_regflags = oregflags;
        if (PL_regcomp_parse >= PL_regxend || *nextchar() != ')') {
-           PL_regcomp_parse++;
-           vFAIL("Unmatched (");
+           PL_regcomp_parse = oregcomp_parse;
+           vFAIL("Unmatched (");
        }
     }
     else if (!paren && PL_regcomp_parse < PL_regxend) {
        if (*PL_regcomp_parse == ')') {
-           PL_regcomp_parse = oregcomp_parse;
-           vFAIL("Unmatched (");
+           PL_regcomp_parse++;
+           vFAIL("Unmatched )");
        }
        else
            FAIL("Junk on end of regexp");      /* "Can't happen". */
@@ -2704,8 +2704,8 @@ tryagain:
                if (num > 9 && num >= PL_regnpar)
                    goto defchar;
                else {
-                   while (isDIGIT(*PL_regcomp_parse))
-                       PL_regcomp_parse++;
+                   while (isDIGIT(*PL_regcomp_parse))
+                       PL_regcomp_parse++;
 
                    if (!SIZE_ONLY && num > PL_regcomp_rx->nparens)
                        vFAIL("Reference to nonexistent group");
index afdcd58..246a838 100644 (file)
@@ -45,9 +45,9 @@ a[b-d]e       ace     y       $&      ace
 a[b-d] aac     y       $&      ac
 a[-b]  a-      y       $&      a-
 a[b-]  a-      y       $&      a-
-a[b-a] -       c       -       /a[b-a]/: invalid [] range "b-a" in regexp
-a[]b   -       c       -       /a[]b/: unmatched [] in regexp
-a[     -       c       -       /a[/: unmatched [] in regexp
+a[b-a] -       c       -       Invalid [] range "b-a" at <HERE< mark in regex m/a[b-a <<<HERE<<< ]/
+a[]b   -       c       -       Unmatched [ at <HERE< mark in regex m/a[ <<<HERE<<< ]b/ at (eval 96) line 1, <TESTS> line 49.
+a[     -       c       -       Unmatched [ at <HERE< mark in regex m/a[ <<<HERE<<< / at (eval 97) line 1, <TESTS> line 50.
 a]     a]      y       $&      a]
 a[]]b  a]b     y       $&      a]b
 a[^bc]d        aed     y       $&      aed
@@ -95,21 +95,21 @@ a[\S]b      a-b     y       -       -
 ab|cd  abc     y       $&      ab
 ab|cd  abcd    y       $&      ab
 ()ef   def     y       $&-$1   ef-
-*a     -       c       -       Quantifier follows nothing in regexp
-(*)b   -       c       -       Quantifier follows nothing in regexp
+*a     -       c       -       Quantifier follows nothing at <HERE< mark in regex m/* <<<HERE<<< a/ at (eval 192) line 1, <TESTS> line 98.
+(*)b   -       c       -       Quantifier follows nothing at <HERE< mark in regex m/(* <<<HERE<<< )b/ at (eval 193) line 1, <TESTS> line 99.
 $b     b       n       -       -
 a\     -       c       -       Search pattern not terminated
 a\(b   a(b     y       $&-$1   a(b-
 a\(*b  ab      y       $&      ab
 a\(*b  a((b    y       $&      a((b
 a\\b   a\b     y       $&      a\b
-abc)   -       c       -       /abc)/: unmatched () in regexp
-(abc   -       c       -       /(abc/: unmatched () in regexp
+abc)   -       c       -       Unmatched ) at <HERE< mark in regex m/abc) <<<HERE<<< / at (eval 205) line 1, <TESTS> line 106.
+(abc   -       c       -       Unmatched ( at <HERE< mark in regex m/( <<<HERE<<< abc/ at (eval 206) line 1, <TESTS> line 107.
 ((a))  abc     y       $&-$1-$2        a-a-a
 (a)b(c)        abc     y       $&-$1-$2        abc-a-c
 a+b+c  aabbabc y       $&      abc
 a{1,}b{1,}c    aabbabc y       $&      abc
-a**    -       c       -       Nested quantifiers in regexp
+a**    -       c       -       Nested quantifiers at <HERE< mark in regex m/a** <<<HERE<<< / at (eval 215) line 1, <TESTS> line 112.
 a.+?c  abcabc  y       $&      abc
 (a+|b)*        ab      y       $&-$1   ab-b
 (a+|b){0,}     ab      y       $&-$1   ab-b
@@ -117,7 +117,7 @@ a.+?c       abcabc  y       $&      abc
 (a+|b){1,}     ab      y       $&-$1   ab-b
 (a+|b)?        ab      y       $&-$1   a-a
 (a+|b){0,1}    ab      y       $&-$1   a-a
-)(     -       c       -       /)(/: unmatched () in regexp
+)(     -       c       -       Unmatched ) at <HERE< mark in regex m/) <<<HERE<<< (/ at (eval 230) line 1, <TESTS> line 120.
 [^ab]* cde     y       $&      cde
 abc            n       -       -
 a*             y       $&      
@@ -218,9 +218,9 @@ a[-]?c      ac      y       $&      ac
 'a[b-d]'i      AAC     y       $&      AC
 'a[-b]'i       A-      y       $&      A-
 'a[b-]'i       A-      y       $&      A-
-'a[b-a]'i      -       c       -       /a[b-a]/: invalid [] range "b-a" in regexp
-'a[]b'i        -       c       -       /a[]b/: unmatched [] in regexp
-'a['i  -       c       -       /a[/: unmatched [] in regexp
+'a[b-a]'i      -       c       -       Invalid [] range "b-a" at <HERE< mark in regex m/a[b-a <<<HERE<<< ]/
+'a[]b'i        -       c       -       Unmatched [ at <HERE< mark in regex m/a[ <<<HERE<<< ]b/ at (eval 431) line 1, <TESTS> line 222.
+'a['i  -       c       -       Unmatched [ at <HERE< mark in regex m/a[ <<<HERE<<< / at (eval 432) line 1, <TESTS> line 223.
 'a]'i  A]      y       $&      A]
 'a[]]b'i       A]B     y       $&      A]B
 'a[^bc]d'i     AED     y       $&      AED
@@ -232,21 +232,21 @@ a[-]?c    ac      y       $&      ac
 'ab|cd'i       ABC     y       $&      AB
 'ab|cd'i       ABCD    y       $&      AB
 '()ef'i        DEF     y       $&-$1   EF-
-'*a'i  -       c       -       Quantifier follows nothing in regexp
-'(*)b'i        -       c       -       Quantifier follows nothing in regexp
+'*a'i  -       c       -       Quantifier follows nothing at <HERE< mark in regex m/* <<<HERE<<< a/ at (eval 455) line 1, <TESTS> line 235.
+'(*)b'i        -       c       -       Quantifier follows nothing at <HERE< mark in regex m/(* <<<HERE<<< )b/ at (eval 456) line 1, <TESTS> line 236.
 '$b'i  B       n       -       -
 'a\'i  -       c       -       Search pattern not terminated
 'a\(b'i        A(B     y       $&-$1   A(B-
 'a\(*b'i       AB      y       $&      AB
 'a\(*b'i       A((B    y       $&      A((B
 'a\\b'i        A\B     y       $&      A\B
-'abc)'i        -       c       -       /abc)/: unmatched () in regexp
-'(abc'i        -       c       -       /(abc/: unmatched () in regexp
+'abc)'i        -       c       -       Unmatched ) at <HERE< mark in regex m/abc) <<<HERE<<< / at (eval 468) line 1, <TESTS> line 243.
+'(abc'i        -       c       -       Unmatched ( at <HERE< mark in regex m/( <<<HERE<<< abc/ at (eval 469) line 1, <TESTS> line 244.
 '((a))'i       ABC     y       $&-$1-$2        A-A-A
 '(a)b(c)'i     ABC     y       $&-$1-$2        ABC-A-C
 'a+b+c'i       AABBABC y       $&      ABC
 'a{1,}b{1,}c'i AABBABC y       $&      ABC
-'a**'i -       c       -       Nested quantifiers in regexp
+'a**'i -       c       -       Nested quantifiers at <HERE< mark in regex m/a** <<<HERE<<< / at (eval 478) line 1, <TESTS> line 249.
 'a.+?c'i       ABCABC  y       $&      ABC
 'a.*?c'i       ABCABC  y       $&      ABC
 'a.{0,5}?c'i   ABCABC  y       $&      ABC
@@ -257,7 +257,7 @@ a[-]?c      ac      y       $&      ac
 '(a+|b)?'i     AB      y       $&-$1   A-A
 '(a+|b){0,1}'i AB      y       $&-$1   A-A
 '(a+|b){0,1}?'i        AB      y       $&-$1   -
-')('i  -       c       -       /)(/: unmatched () in regexp
+')('i  -       c       -       Unmatched ) at <HERE< mark in regex m/) <<<HERE<<< (/ at (eval 499) line 1, <TESTS> line 260.
 '[^ab]*'i      CDE     y       $&      CDE
 'abc'i         n       -       -
 'a*'i          y       $&      
@@ -346,7 +346,7 @@ a(?:b|(c|e){1,2}?|d)+?(.)   ace     y       $1$2    ce
 (?<!c)b        cb      n       -       -
 (?<!c)b        b       y       -       -
 (?<!c)b        b       y       $&      b
-(?<%)b -       c       -       Sequence (?%...) not recognized
+(?<%)b -       c       -       Sequence (?<%...) not recognized at <HERE< mark in regex m/(?<% <<<HERE<<< )b/
 (?:..)*a       aba     y       $&      aba
 (?:..)*?a      aba     y       $&      a
 ^(?:b|a(?=(.)))*\1     abc     y       $&      ab
@@ -397,10 +397,10 @@ a(?:b|(c|e){1,2}?|d)+?(.) ace     y       $1$2    ce
 '(ab)\d\1'i    ab4Ab   y       $1      ab
 foo\w*\d{4}baz foobar1234baz   y       $&      foobar1234baz
 a(?{})b        cabd    y       $&      ab
-a(?{)b -       c       -       /a(?{)b/: Sequence (?{...}) not terminated or not {}-balanced
-a(?{{})b       -       c       -       /a(?{{})b/: Sequence (?{...}) not terminated or not {}-balanced
-a(?{}})b       -       c       -       /a(?{}})b/: Sequence (?{...}) not terminated or not {}-balanced
-a(?{"{"})b     -       c       -       /a(?{"{"})b/: Sequence (?{...}) not terminated or not {}-balanced
+a(?{)b -       c       -       Sequence (?{...}) not terminated or not {}-balanced at <HERE< mark in regex m/a(?{ <<<HERE<<< )b/ at (eval 780) line 1, <TESTS> line 400.
+a(?{{})b       -       c       -       Sequence (?{...}) not terminated or not {}-balanced at <HERE< mark in regex m/a(?{ <<<HERE<<< {})b/ at (eval 781) line 1, <TESTS> line 401.
+a(?{}})b       -       c       -       
+a(?{"{"})b     -       c       -       Sequence (?{...}) not terminated or not {}-balanced at <HERE< mark in regex m/a(?{ <<<HERE<<< "{"})b/ at (eval 783) line 1, <TESTS> line 403.
 a(?{"\{"})b    cabd    y       $&      ab
 a(?{"{"}})b    -       c       -       Unmatched right curly bracket
 a(?{$bl="\{"}).b       caxbd   y       $bl     {
@@ -441,7 +441,7 @@ x(~~)*(?:(?:F)?)?   x~~     y       -       -
 ^(\(+)?blah(?(1)(\)))$ blah    y       ($2)    ()
 ^(\(+)?blah(?(1)(\)))$ blah)   n       -       -
 ^(\(+)?blah(?(1)(\)))$ (blah   n       -       -
-(?(1?)a|b)     a       c       -       Switch (?(number? not recognized
+(?(1?)a|b)     a       c       -       Switch condition not recognized at <HERE< mark in regex m/(?(1? <<<HERE<<< )a|b)/ at (eval 868) line 1, <TESTS> line 444.
 (?(1)a|b|c)    a       c       -       Switch (?(condition)... contains too many branches
 (?(?{0})a|b)   a       n       -       -
 (?(?{0})b|a)   a       y       $&      a
@@ -473,10 +473,10 @@ $(?<=^(a))        a       y       $1      a
 ([[:]+)        a:[b]:  y       $1      :[
 ([[=]+)        a=[b]=  y       $1      =[
 ([[.]+)        a.[b].  y       $1      .[
-[a[:xyz:       -       c       -       /[a[:xyz:/: unmatched [] in regexp
-[a[:xyz:]      -       c       -       Character class [:xyz:] unknown
+[a[:xyz:       -       c       -       Unmatched [ at <HERE< mark in regex m/[ <<<HERE<<< a[:xyz:/ at (eval 950) line 1, <TESTS> line 476.
+[a[:xyz:]      -       c       -       POSIX class [:xyz:] unknown at <HERE< mark in regex m/[a[:xyz:] <<<HERE<<< /
 [a[:]b[:c]     abc     y       $&      abc
-([a[:xyz:]b]+) pbaq    c       -       Character class [:xyz:] unknown
+([a[:xyz:]b]+) pbaq    c       -       POSIX class [:xyz:] unknown at <HERE< mark in regex m/([a[:xyz:] <<<HERE<<< b]+)/
 [a[:]b[:c]     abc     y       $&      abc
 ([[:alpha:]]+) ABcd01Xy__--  ${nulnul}${ffff}  y       $1      ABcd
 ([[:alnum:]]+) ABcd01Xy__--  ${nulnul}${ffff}  y       $1      ABcd01Xy
@@ -503,8 +503,8 @@ $(?<=^(a))  a       y       $1      a
 ([[:^word:]]+) ABcd01Xy__--  ${nulnul}${ffff}  y       $1      --  ${nulnul}${ffff}
 ([[:^upper:]]+)        ABcd01Xy__--  ${nulnul}${ffff}  y       $1      cd01
 ([[:^xdigit:]]+)       ABcd01Xy__--  ${nulnul}${ffff}  y       $1      Xy__--  ${nulnul}${ffff}
-[[:foo:]]      -       c       -       Character class [:foo:] unknown
-[[:^foo:]]     -       c       -       Character class [:^foo:] unknown
+[[:foo:]]      -       c       -       POSIX class [:foo:] unknown at <HERE< mark in regex m/[[:foo:] <<<HERE<<< ]/
+[[:^foo:]]     -       c       -       POSIX class [:^foo:] unknown at <HERE< mark in regex m/[[:^foo:] <<<HERE<<< ]/
 ((?>a+)b)      aaab    y       $1      aaab
 (?>(a+))b      aaab    y       $1      aaa
 ((?>[^()]+)|\([^()]*\))+       ((abc(ade)ufh()()x      y       $&      abc(ade)ufh()()x
index 9da560c..ad7a8ab 100755 (executable)
@@ -20,7 +20,11 @@ if (opendir(OP, "op")) { print "ok 1\n"; } else { print "not ok 1\n"; }
 @D = grep(/^[^\.].*\.t$/i, readdir(OP));
 closedir(OP);
 
-if (@D > 20 && @D < 150) { print "ok 2\n"; } else { print "not ok 2\n"; }
+##
+## This range will have to adjust as the number of tests expands,
+## as it's counting the number of .t files in src/t
+##
+if (@D > 90 && @D < 110) { print "ok 2\n"; } else { print "not ok 2\n"; }
 
 @R = sort @D;
 @G = sort <op/*.t>;