break/next/returnでブロックから脱出する際にensure節が正しく実行されない問題を修正
code:ruby
def foo
2.times do |i|
2.times do |j|
puts "i=#{i} j=#{j}"
return 3 if i == 1 && j == 0
ensure
puts "ensure in j loop, j=#{j}"
end
ensure
puts "ensure in i loop, i=#{i}"
end
ensure
puts "ensure in foo"
end
foo
code:text
FuncId(173) name:<> mode:method FuncId(173) regs:6 { args: 1 non_temp: 1 temp: 4}
+:00000 init_method reg:5 arg:1 req:1 opt:0 rest:false block:None stack_offset:6
:00002 %3 = dynvar(1, %1)
:00003 %4 = literalj="
:00004 %5 = %1
:00005 %2 = concat(%2; 4)
:00008 %2 = dynvar(1, %1)
:00010 condnotbr _%2 =>:00016
:00012 condnotbr _%2 =>:00016
+:00013 %2 = 3: i32
:00014 method_ret %2
+:00015 br =>:00017
+:00016 %2 = nil
:00018 %4 = %1
:00019 %3 = concat(%3; 2)
:00022 ensure_end
:00023 ret %2