summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--parse.y2
-rw-r--r--test/ruby/test_syntax.rb18
2 files changed, 19 insertions, 1 deletions
diff --git a/parse.y b/parse.y
index b743b7befe..3879668ac2 100644
--- a/parse.y
+++ b/parse.y
@@ -3453,7 +3453,7 @@ lambda_body : tLAMBEG compstmt '}'
token_info_pop("}");
$$ = $2;
}
- | keyword_do_LAMBDA compstmt k_end
+ | keyword_do_LAMBDA bodystmt k_end
{
$$ = $2;
}
diff --git a/test/ruby/test_syntax.rb b/test/ruby/test_syntax.rb
index e85d6b545f..57ce169cd3 100644
--- a/test/ruby/test_syntax.rb
+++ b/test/ruby/test_syntax.rb
@@ -1128,6 +1128,24 @@ eom
assert_equal(:begin, result)
end
+ def test_rescue_do_end_ensure_in_lambda
+ result = []
+ eval("#{<<-"begin;"}\n#{<<-"end;"}")
+ begin;
+ -> do
+ result << :begin
+ raise "An exception occurred!"
+ rescue
+ result << :rescue
+ else
+ result << :else
+ ensure
+ result << :ensure
+ end.call
+ end;
+ assert_equal([:begin, :rescue, :ensure], result)
+ end
+
def test_return_in_loop
obj = Object.new
def obj.test