summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--parse.y2
-rw-r--r--test/ruby/test_syntax.rb5
3 files changed, 11 insertions, 1 deletions
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 <nobu@ruby-lang.org>
+
+ * parse.y (primary): allow parenthesised statement as a method
+ argument. [Feature #12686]
+
Fri Aug 19 09:12:45 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
* 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
$<val>1 = cmdarg_stack;
CMDARG_SET(0);
}
- expr {SET_LEX_STATE(EXPR_ENDARG);} rparen
+ stmt {SET_LEX_STATE(EXPR_ENDARG);} rparen
{
CMDARG_SET($<val>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