1
0
Fork 0
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:
nobu 2016-11-30 14:43:43 +00:00
parent aab0d67a1f
commit 88b745f0ca
2 changed files with 9 additions and 5 deletions

10
parse.y
View file

@ -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);

View file

@ -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