Better error pos for grok_bslash_[xo]
authorKarl Williamson <public@khwilliamson.com>
Mon, 7 Jan 2013 05:03:09 +0000 (22:03 -0700)
committerKarl Williamson <public@khwilliamson.com>
Fri, 11 Jan 2013 18:50:35 +0000 (11:50 -0700)
These functions advance the parse pointer for the caller.  The regex
code has the infrastructure to output a marker as to where the error
was.  This commit simply moves the parse pointer past all the legal
digits in the input, which are likely supposed to be part of the number,
which makes it likely that the missing right brace point is just past
those.

dquote_static.c
t/re/reg_mesg.t

index fa8e354..d928e67 100644 (file)
@@ -130,6 +130,9 @@ S_grok_bslash_o(pTHX_ char **s, UV *uv, const char** error_msg,
     e = strchr(*s, '}');
     if (!e) {
         (*s)++;  /* Move past the '{' */
+        while (isOCTAL(**s)) { /* Position beyond the legal digits */
+            (*s)++;
+        }
         *error_msg = "Missing right brace on \\o{";
        return FALSE;
     }
@@ -209,6 +212,9 @@ S_grok_bslash_x(pTHX_ char **s, UV *uv, const char** error_msg,
     e = strchr(*s, '}');
     if (!e) {
         (*s)++;  /* Move past the '{' */
+        while (isXDIGIT(**s)) { /* Position beyond the legal digits */
+            (*s)++;
+        }
         /* XXX The corresponding message above for \o is just '\\o{'; other
          * messages for other constructs include the '}', so are inconsistent.
          */
index aeb62e6..788363f 100644 (file)
@@ -89,13 +89,17 @@ my @death =
 
  'my $m = "\\\"; $m =~ $m', => 'Trailing \ in regex m/\/',
 
- '/\x{1/' => 'Missing right brace on \x{} in regex; marked by {#} in m/\x{{#}1/',
+ '/\x{1/' => 'Missing right brace on \x{} in regex; marked by {#} in m/\x{1{#}/',
+ '/\x{X/' => 'Missing right brace on \x{} in regex; marked by {#} in m/\x{{#}X/',
 
  '/[\x{X]/' => 'Missing right brace on \x{} in regex; marked by {#} in m/[\x{{#}X]/',
+ '/[\x{A]/' => 'Missing right brace on \x{} in regex; marked by {#} in m/[\x{A{#}]/',
 
- '/\o{1/' => 'Missing right brace on \o{ in regex; marked by {#} in m/\o{{#}1/',
+ '/\o{1/' => 'Missing right brace on \o{ in regex; marked by {#} in m/\o{1{#}/',
+ '/\o{X/' => 'Missing right brace on \o{ in regex; marked by {#} in m/\o{{#}X/',
 
  '/[\o{X]/' => 'Missing right brace on \o{ in regex; marked by {#} in m/[\o{{#}X]/',
+ '/[\o{7]/' => 'Missing right brace on \o{ in regex; marked by {#} in m/[\o{7{#}]/',
 
  '/[[:barf:]]/' => 'POSIX class [:barf:] unknown in regex; marked by {#} in m/[[:barf:]{#}]/',