[PRISM] Add splatkw to super calls when necessary

This commit is contained in:
Kevin Newton 2024-01-31 21:42:31 -05:00
Родитель d96b4586e4
Коммит a7b47f96f3
1 изменённых файлов: 4 добавлений и 1 удалений

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

@ -7430,7 +7430,6 @@ pm_compile_node(rb_iseq_t *iseq, const pm_node_t *node, LINK_ANCHOR *const ret,
PM_PUTSELF; PM_PUTSELF;
int argc = pm_setup_args(super_node->arguments, &flags, &keywords, iseq, ret, popped, scope_node, dummy_line_node, parser); int argc = pm_setup_args(super_node->arguments, &flags, &keywords, iseq, ret, popped, scope_node, dummy_line_node, parser);
flags |= VM_CALL_SUPER | VM_CALL_FCALL; flags |= VM_CALL_SUPER | VM_CALL_FCALL;
if (super_node->block) { if (super_node->block) {
@ -7453,6 +7452,10 @@ pm_compile_node(rb_iseq_t *iseq, const pm_node_t *node, LINK_ANCHOR *const ret,
} }
} }
if ((flags & VM_CALL_ARGS_BLOCKARG) && (flags & VM_CALL_KW_SPLAT) && !(flags & VM_CALL_KW_SPLAT_MUT)) {
ADD_INSN(args, &dummy_line_node, splatkw);
}
ADD_SEQ(ret, args); ADD_SEQ(ret, args);
ADD_INSN2(ret, &dummy_line_node, invokesuper, ADD_INSN2(ret, &dummy_line_node, invokesuper,
new_callinfo(iseq, 0, argc, flags, keywords, parent_block != NULL), new_callinfo(iseq, 0, argc, flags, keywords, parent_block != NULL),