From c8b60c8ac2c8bbd077150792b5b207e983ab3634 Mon Sep 17 00:00:00 2001 From: Matt Valentine-House Date: Wed, 6 Dec 2023 20:22:18 +0000 Subject: [PRISM] Correct depth offset for block local vars Blocks should always look at their own local table first, even when defined inside an ensure/rescue or something else that uses depth offset. We can ignore the depth offset if we're doing local lookups inside a block --- test/ruby/test_compile_prism.rb | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'test/ruby') diff --git a/test/ruby/test_compile_prism.rb b/test/ruby/test_compile_prism.rb index a707aa5a9c..339300a638 100644 --- a/test/ruby/test_compile_prism.rb +++ b/test/ruby/test_compile_prism.rb @@ -789,6 +789,23 @@ module Prism end end CODE + assert_prism_eval(<<~CODE) + def test + ensure + {}.each do |key, value| + {}[key] = value + end + end + CODE + assert_prism_eval(<<~CODE) + def test + a = 1 + ensure + {}.each do |key, value| + {}[key] = a + end + end + CODE end def test_NextNode @@ -924,6 +941,15 @@ module Prism a + b + c CODE assert_prism_eval("begin; rescue; end") + + assert_prism_eval(<<~CODE) + begin + rescue + args.each do |key, value| + tmp[key] = 1 + end + end + CODE end def test_RescueModiferNode -- cgit v1.2.3