[PRISM] Fix fallthrough for PM_ENSURE_NODE

This caused it to fall into PM_ELSE_NODE which caused ensure nodes to be
compiled twice.

Fixes ruby/prism#2176.
This commit is contained in:
Peter Zhu 2024-01-17 11:19:54 -05:00
Родитель de9411c0b9
Коммит f43a919be4
2 изменённых файлов: 16 добавлений и 0 удалений

Просмотреть файл

@ -4236,6 +4236,7 @@ pm_compile_node(rb_iseq_t *iseq, const pm_node_t *node, LINK_ANCHOR *const ret,
PM_COMPILE((pm_node_t *)ensure_node->statements);
}
ADD_LABEL(ret, end);
return;
}
case PM_ELSE_NODE: {
pm_else_node_t *cast = (pm_else_node_t *)node;

Просмотреть файл

@ -931,6 +931,21 @@ module Prism
end
a
CODE
# Test that ensure block only evaluated once
assert_prism_eval(<<~RUBY)
res = []
begin
begin
raise
ensure
res << $!.to_s
end
rescue
res
end
RUBY
assert_prism_eval(<<-CODE)
a = 1
begin