diff options
| author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-05-09 17:12:43 +0000 |
|---|---|---|
| committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-05-09 17:12:43 +0000 |
| commit | 046c94380bda1aafe99f56a854f9d44478381b1d (patch) | |
| tree | f9d382e3c07f93d4318f2e87ecb6dbd1282d6a0e | |
| parent | 462e6675d2442d3dd5cc825bbd0516062ee8f9e8 (diff) | |
parse.y: do after cmdarg in paren
* parse.y (parser_yylex): set state to ENDARG after a string
literal, so that `do` after a literal should be `do_block` and
bound to the outer method, as well as a numeric/symbol literal.
[ruby-core:72482] [Bug #11873]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58640 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
| -rw-r--r-- | parse.y | 2 | ||||
| -rw-r--r-- | test/ruby/test_syntax.rb | 4 |
2 files changed, 5 insertions, 1 deletions
@@ -7886,7 +7886,7 @@ parser_yylex(struct parser_params *parser) if (token == tSTRING_END || token == tREGEXP_END || token == tLABEL_END) { rb_gc_force_recycle((VALUE)lex_strterm); lex_strterm = 0; - SET_LEX_STATE(token == tLABEL_END ? EXPR_BEG|EXPR_LABEL : EXPR_END); + SET_LEX_STATE(token == tLABEL_END ? EXPR_BEG|EXPR_LABEL : EXPR_ENDARG); } } return token; diff --git a/test/ruby/test_syntax.rb b/test/ruby/test_syntax.rb index 640fbb9b64..00ba5192a1 100644 --- a/test/ruby/test_syntax.rb +++ b/test/ruby/test_syntax.rb @@ -898,6 +898,10 @@ eom assert_valid_syntax %q{a b(c d), 1 do end}, bug11873 assert_valid_syntax %q{a b{c(d)}, 1 do end}, bug11873 assert_valid_syntax %q{a b(c(d)), 1 do end}, bug11873 + assert_valid_syntax %q{a b{c d}, "x" do end}, bug11873 + assert_valid_syntax %q{a b(c d), "x" do end}, bug11873 + assert_valid_syntax %q{a b{c(d)}, "x" do end}, bug11873 + assert_valid_syntax %q{a b(c(d)), "x" do end}, bug11873 end def test_block_after_cmdarg_in_paren |
