diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-04-19 06:38:31 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-04-19 06:38:31 +0000 |
commit | c501345218dc5fb0fae90d56a0c6fd19d38df5bb (patch) | |
tree | 8196b0407f41f8e1c8046dc73cfea0b7999c4460 | |
parent | 95de2b001247b5e8ccd89d5ba7225d42aafec1e5 (diff) | |
download | ruby-c501345218dc5fb0fae90d56a0c6fd19d38df5bb.tar.gz |
parse.y: allow parenthesed do-block in cmdarg
* parse.y (primary): flush cmdarg flags inside left-paren in a
command argument, to allow parenthesed do-block as an argument
without arguments parentheses. [ruby-core:61950] [Bug #9726]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45637 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | parse.y | 12 | ||||
-rw-r--r-- | test/ruby/test_syntax.rb | 5 |
3 files changed, 20 insertions, 3 deletions
@@ -1,3 +1,9 @@ +Sat Apr 19 15:38:29 2014 Nobuyoshi Nakada <nobu@ruby-lang.org> + + * parse.y (primary): flush cmdarg flags inside left-paren in a + command argument, to allow parenthesed do-block as an argument + without arguments parentheses. [ruby-core:61950] [Bug #9726] + Sat Apr 19 10:07:24 2014 Tanaka Akira <akr@fsij.org> * internal.h (struct RBignum): Use size_t for len. @@ -2620,12 +2620,18 @@ primary : literal $$ = dispatch1(paren, 0); %*/ } - | tLPAREN_ARG expr {lex_state = EXPR_ENDARG;} rparen + | tLPAREN_ARG { + $<val>1 = cmdarg_stack; + cmdarg_stack = 0; + } + expr {lex_state = EXPR_ENDARG;} rparen + { + cmdarg_stack = $<val>1; /*%%%*/ - $$ = $2; + $$ = $3; /*% - $$ = dispatch1(paren, $2); + $$ = dispatch1(paren, $3); %*/ } | tLPAREN compstmt ')' diff --git a/test/ruby/test_syntax.rb b/test/ruby/test_syntax.rb index bc1d80f990..0847c28bfc 100644 --- a/test/ruby/test_syntax.rb +++ b/test/ruby/test_syntax.rb @@ -78,6 +78,11 @@ class TestSyntax < Test::Unit::TestCase end end + def test_do_block_in_cmdarg + bug9726 = '[ruby-core:61950] [Bug #9726]' + assert_valid_syntax("tap (proc do end)", __FILE__, bug9726) + end + def test_keyword_rest bug5989 = '[ruby-core:42455]' assert_valid_syntax("def kwrest_test(**a) a; end", __FILE__, bug5989) |