mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
parse.y: refine error message
* parse.y (parser_tokadd_utf8): refine error message at bad char in unicode escape, "invalid" instead of "unterminated". git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56947 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
aab0d67a1f
commit
88b745f0ca
2 changed files with 9 additions and 5 deletions
10
parse.y
10
parse.y
|
@ -5794,9 +5794,9 @@ parser_tokadd_utf8(struct parser_params *parser, rb_encoding **encp,
|
||||||
if (regexp_literal) { tokadd('\\'); tokadd('u'); }
|
if (regexp_literal) { tokadd('\\'); tokadd('u'); }
|
||||||
|
|
||||||
if (peek(open_brace)) { /* handle \u{...} form */
|
if (peek(open_brace)) { /* handle \u{...} form */
|
||||||
|
int c, last = nextc();
|
||||||
do {
|
do {
|
||||||
if (regexp_literal) { tokadd(*lex_p); }
|
if (regexp_literal) tokadd(last);
|
||||||
nextc();
|
|
||||||
codepoint = scan_hex(lex_p, 6, &numlen);
|
codepoint = scan_hex(lex_p, 6, &numlen);
|
||||||
if (numlen == 0) {
|
if (numlen == 0) {
|
||||||
yyerror("invalid Unicode escape");
|
yyerror("invalid Unicode escape");
|
||||||
|
@ -5808,15 +5808,15 @@ parser_tokadd_utf8(struct parser_params *parser, rb_encoding **encp,
|
||||||
}
|
}
|
||||||
parser_tokadd_codepoint(parser, encp,string_literal, regexp_literal,
|
parser_tokadd_codepoint(parser, encp,string_literal, regexp_literal,
|
||||||
codepoint, (int)numlen);
|
codepoint, (int)numlen);
|
||||||
} while (string_literal && (peek(' ') || peek('\t')));
|
if (ISSPACE(c = nextc())) last = c;
|
||||||
|
} while (string_literal && c != close_brace);
|
||||||
|
|
||||||
if (!peek(close_brace)) {
|
if (c != close_brace) {
|
||||||
yyerror("unterminated Unicode escape");
|
yyerror("unterminated Unicode escape");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (regexp_literal) tokadd(close_brace);
|
if (regexp_literal) tokadd(close_brace);
|
||||||
nextc();
|
|
||||||
}
|
}
|
||||||
else { /* handle \uxxxx form */
|
else { /* handle \uxxxx form */
|
||||||
codepoint = scan_hex(lex_p, 4, &numlen);
|
codepoint = scan_hex(lex_p, 4, &numlen);
|
||||||
|
|
|
@ -256,6 +256,10 @@ EOS
|
||||||
assert_raise(SyntaxError) { eval %q("\ughij") } # bad hex digits
|
assert_raise(SyntaxError) { eval %q("\ughij") } # bad hex digits
|
||||||
assert_raise(SyntaxError) { eval %q("\u{ghij}") } # bad hex digits
|
assert_raise(SyntaxError) { eval %q("\u{ghij}") } # bad hex digits
|
||||||
|
|
||||||
|
assert_raise_with_message(SyntaxError, /invalid/) {
|
||||||
|
eval %q("\u{123.}") # bad char
|
||||||
|
}
|
||||||
|
|
||||||
assert_raise(SyntaxError) { eval %q("\u{123 456 }")} # extra space
|
assert_raise(SyntaxError) { eval %q("\u{123 456 }")} # extra space
|
||||||
assert_raise(SyntaxError) { eval %q("\u{ 123 456}")} # extra space
|
assert_raise(SyntaxError) { eval %q("\u{ 123 456}")} # extra space
|
||||||
assert_raise(SyntaxError) { eval %q("\u{123 456}")} # extra space
|
assert_raise(SyntaxError) { eval %q("\u{123 456}")} # extra space
|
||||||
|
|
Loading…
Reference in a new issue