diff --git a/ChangeLog b/ChangeLog index c97413acf6..a02fcded34 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Fri Aug 19 11:39:06 2016 Nobuyoshi Nakada + + * parse.y (primary): allow parenthesised statement as a method + argument. [Feature #12686] + Fri Aug 19 09:12:45 2016 Nobuyoshi Nakada * vm.c (vm_set_main_stack): TOPLEVEL_BINDING must be built. diff --git a/parse.y b/parse.y index 17f0f9c50a..7a1494142b 100644 --- a/parse.y +++ b/parse.y @@ -2659,7 +2659,7 @@ primary : literal $1 = cmdarg_stack; CMDARG_SET(0); } - expr {SET_LEX_STATE(EXPR_ENDARG);} rparen + stmt {SET_LEX_STATE(EXPR_ENDARG);} rparen { CMDARG_SET($1); /*%%%*/ diff --git a/test/ruby/test_syntax.rb b/test/ruby/test_syntax.rb index ce013583be..c135cec4ea 100644 --- a/test/ruby/test_syntax.rb +++ b/test/ruby/test_syntax.rb @@ -827,6 +827,11 @@ eom end end + def test_parenthesised_statement_argument + assert_syntax_error("foo(bar rescue nil)", /unexpected modifier_rescue/) + assert_valid_syntax("foo (bar rescue nil)") + end + private def not_label(x) @result = x; @not_label ||= nil end