summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--parse.y9
-rw-r--r--test/ruby/test_assignment.rb5
2 files changed, 14 insertions, 0 deletions
diff --git a/parse.y b/parse.y
index de2a92285c..a6a9a4160b 100644
--- a/parse.y
+++ b/parse.y
@@ -1387,6 +1387,15 @@ stmt : keyword_alias fitem {SET_LEX_STATE(EXPR_FNAME|EXPR_FITEM);} fitem
/*% %*/
/*% ripper: assign!($1, $3) %*/
}
+ | mlhs '=' mrhs_arg modifier_rescue stmt
+ {
+ /*%%%*/
+ YYLTYPE loc = code_loc_gen(&@4, &@5);
+ value_expr($3);
+ $$ = node_assign(p, $1, NEW_RESCUE($3, NEW_RESBODY(0, remove_begin($5), 0, &loc), 0, &@$), &@$);
+ /*% %*/
+ /*% ripper: massign!($1, rescue_mod!($3, $5)) %*/
+ }
| mlhs '=' mrhs_arg
{
/*%%%*/
diff --git a/test/ruby/test_assignment.rb b/test/ruby/test_assignment.rb
index c1f8c46890..c14568fde3 100644
--- a/test/ruby/test_assignment.rb
+++ b/test/ruby/test_assignment.rb
@@ -92,6 +92,11 @@ class TestAssignment < Test::Unit::TestCase
a,b,*c = *[*[1,2]]; assert_equal([1,2,[]], [a,b,c])
end
+ def test_assign_rescue
+ a = raise rescue 2; assert_equal(2, a)
+ a, b = raise rescue [3,4]; assert_equal([3, 4], [a, b])
+ end
+
def test_assign_abbreviated
bug2050 = '[ruby-core:25629]'
a = Hash.new {[]}