[PRISM] Fix else with rescue

Fixes ruby/prism#2307.
This commit is contained in:
Peter Zhu 2024-01-31 13:42:11 -05:00 committed by Kevin Newton
parent 95c9711d6e
commit cb98b018c0
2 changed files with 19 additions and 1 deletions

View File

@ -3583,12 +3583,13 @@ pm_compile_rescue(rb_iseq_t *iseq, pm_begin_node_t *begin_node, LINK_ANCHOR *con
}
ISEQ_COMPILE_DATA(iseq)->in_rescue = prev_in_rescue;
ADD_LABEL(ret, lend);
if (begin_node->else_clause) {
PM_POP_UNLESS_POPPED;
PM_COMPILE((pm_node_t *)begin_node->else_clause);
}
ADD_LABEL(ret, lend);
PM_NOP;
ADD_LABEL(ret, lcont);

View File

@ -1395,6 +1395,23 @@ a
end
end
CODE
# Test RescueNode with ElseNode
assert_prism_eval(<<~RUBY)
calls = []
begin
begin
rescue RuntimeError
calls << 1
else
calls << 2
raise RuntimeError
end
rescue RuntimeError
end
calls
RUBY
end
def test_RescueModifierNode