parent
8b8dcc7af1
commit
0462b1b350
@ -3380,9 +3380,20 @@ pm_compile_node(rb_iseq_t *iseq, const pm_node_t *node, LINK_ANCHOR *const ret,
|
||||
pm_when_node_t *when_node = (pm_when_node_t *)conditions.nodes[i];
|
||||
|
||||
for (size_t i = 0; i < when_node->conditions.size; i++) {
|
||||
PM_COMPILE_NOT_POPPED(when_node->conditions.nodes[i]);
|
||||
ADD_INSN1(ret, &dummy_line_node, topn, INT2FIX(1));
|
||||
ADD_SEND_WITH_FLAG(ret, &dummy_line_node, idEqq, INT2NUM(1), INT2FIX(VM_CALL_FCALL | VM_CALL_ARGS_SIMPLE));
|
||||
pm_node_t *condition_node = when_node->conditions.nodes[i];
|
||||
|
||||
if (PM_NODE_TYPE_P(condition_node, PM_SPLAT_NODE)) {
|
||||
ADD_INSN (ret, &dummy_line_node, dup);
|
||||
PM_COMPILE_NOT_POPPED(condition_node);
|
||||
ADD_INSN1(ret, &dummy_line_node, splatarray, Qfalse);
|
||||
ADD_INSN1(ret, &dummy_line_node, checkmatch, INT2FIX(VM_CHECKMATCH_TYPE_CASE | VM_CHECKMATCH_ARRAY));
|
||||
}
|
||||
else {
|
||||
PM_COMPILE_NOT_POPPED(condition_node);
|
||||
ADD_INSN1(ret, &dummy_line_node, topn, INT2FIX(1));
|
||||
ADD_SEND_WITH_FLAG(ret, &dummy_line_node, idEqq, INT2NUM(1), INT2FIX(VM_CALL_FCALL | VM_CALL_ARGS_SIMPLE));
|
||||
}
|
||||
|
||||
ADD_INSNL(ret, &dummy_line_node, branchif, label);
|
||||
}
|
||||
}
|
||||
|
@ -767,6 +767,17 @@ module Prism
|
||||
end
|
||||
prism_test_case_node
|
||||
CODE
|
||||
|
||||
# Test splat in when
|
||||
assert_prism_eval(<<~RUBY)
|
||||
ary = [1, 2]
|
||||
case 1
|
||||
when *ary
|
||||
:ok
|
||||
else
|
||||
:ng
|
||||
end
|
||||
RUBY
|
||||
end
|
||||
|
||||
def test_ElseNode
|
||||
|
Loading…
x
Reference in New Issue
Block a user