diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-12-02 02:47:11 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-12-02 02:47:11 +0000 |
commit | 80045bc2a9e12012d6d16517ea5cb037e67eb2c1 (patch) | |
tree | a1040a60e1f79361995a5f3cc0794400c0f56ea4 | |
parent | 76bb017ad2c818f5250047a935e1ba44e1a7c40d (diff) | |
download | ruby-80045bc2a9e12012d6d16517ea5cb037e67eb2c1.tar.gz |
parse.y: relax spaces
* parse.y (parser_tokadd_utf8): relax restriction spaces inside
"\u{...}".
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56963 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | parse.y | 6 | ||||
-rw-r--r-- | test/ruby/test_unicode_escape.rb | 6 |
2 files changed, 8 insertions, 4 deletions
@@ -5800,6 +5800,8 @@ parser_tokadd_utf8(struct parser_params *parser, rb_encoding **encp, if (peek(open_brace)) { /* handle \u{...} form */ int c, last = nextc(); + do c = nextc(); while (ISSPACE(c)); + pushback(c); do { if (regexp_literal) tokadd(last); codepoint = scan_hex(lex_p, 6, &numlen); @@ -5816,7 +5818,8 @@ parser_tokadd_utf8(struct parser_params *parser, rb_encoding **encp, codepoint, (int)numlen)) { return 0; } - if (ISSPACE(c = nextc())) last = c; + while (ISSPACE(c = nextc())) last = c; + pushback(c); } while (string_literal && c != close_brace); if (c != close_brace) { @@ -5825,6 +5828,7 @@ parser_tokadd_utf8(struct parser_params *parser, rb_encoding **encp, } if (regexp_literal) tokadd(close_brace); + nextc(); } else { /* handle \uxxxx form */ codepoint = scan_hex(lex_p, 4, &numlen); diff --git a/test/ruby/test_unicode_escape.rb b/test/ruby/test_unicode_escape.rb index 108cf804e2..5913bb0130 100644 --- a/test/ruby/test_unicode_escape.rb +++ b/test/ruby/test_unicode_escape.rb @@ -260,9 +260,9 @@ EOS 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 assert_raise(SyntaxError) { eval %q("\uD800") } # surrogate block assert_raise(SyntaxError) { eval %q("\uDCBA") } # surrogate block |