зеркало из https://github.com/github/ruby.git
[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:
Родитель
de9411c0b9
Коммит
f43a919be4
|
@ -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
|
||||
|
|
Загрузка…
Ссылка в новой задаче