[PRISM] Fix crash with empty ensure blocks

Fixes ruby/prism#2179.
This commit is contained in:
Peter Zhu 2024-01-16 10:30:31 -05:00
Родитель 7bd7030a96
Коммит 07b9b53459
2 изменённых файлов: 19 добавлений и 1 удалений

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

@ -3247,14 +3247,16 @@ pm_compile_node(rb_iseq_t *iseq, const pm_node_t *node, LINK_ANCHOR *const ret,
PM_PUTNIL_UNLESS_POPPED;
}
}
ADD_LABEL(ret, eend);
ADD_LABEL(ret, econt);
if (!popped) {
PM_NOP;
}
pm_statements_node_t *statements = begin_node->ensure_clause->statements;
if (statements) {
PM_COMPILE((pm_node_t *)statements);
ADD_LABEL(ret, econt);
PM_POP_UNLESS_POPPED;
}

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

@ -962,6 +962,22 @@ module Prism
end
prism_test_ensure_node
CODE
# Test empty ensure block
assert_prism_eval(<<~RUBY)
res = []
begin
begin
raise
ensure
end
rescue
res << "rescue"
end
res
RUBY
end
def test_NextNode