зеркало из https://github.com/github/ruby.git
[PRISM] Implement CallNodes with splat followed by args
This commit is contained in:
Родитель
2233204cc1
Коммит
853fd44745
|
@ -1022,8 +1022,16 @@ pm_setup_args(pm_arguments_node_t *arguments_node, int *flags, struct rb_callinf
|
|||
}
|
||||
// If it's the final node
|
||||
else if (index == arguments_node_list.size - 1) {
|
||||
ADD_INSN1(ret, &dummy_line_node, newarray, INT2FIX(post_splat_counter));
|
||||
ADD_INSN(ret, &dummy_line_node, concatarray);
|
||||
if (post_splat_counter > 1) {
|
||||
ADD_INSN1(ret, &dummy_line_node, newarray, INT2FIX(post_splat_counter));
|
||||
ADD_INSN1(ret, &dummy_line_node, splatarray, Qfalse);
|
||||
ADD_INSN(ret, &dummy_line_node, concatarray);
|
||||
}
|
||||
else {
|
||||
ADD_INSN1(ret, &dummy_line_node, newarray, INT2FIX(post_splat_counter));
|
||||
ADD_INSN(ret, &dummy_line_node, concatarray);
|
||||
}
|
||||
orig_argc = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -935,12 +935,19 @@ module Prism
|
|||
|
||||
# With different types of calling arguments
|
||||
assert_prism_eval(<<-CODE)
|
||||
def self.prism_test_call_node(**); end
|
||||
prism_test_call_node(b: 1, **{})
|
||||
def self.prism_test_call_node_double_splat(**); end
|
||||
prism_test_call_node_double_splat(b: 1, **{})
|
||||
CODE
|
||||
assert_prism_eval(<<-CODE)
|
||||
prism_test_call_node(:b => 1)
|
||||
prism_test_call_node_double_splat(:b => 1)
|
||||
CODE
|
||||
|
||||
assert_prism_eval(<<-CODE)
|
||||
def self.prism_test_call_node_splat(*); end
|
||||
prism_test_call_node_splat(*[], 1)
|
||||
CODE
|
||||
|
||||
assert_prism_eval("prism_test_call_node_splat(*[], 1, 2)")
|
||||
end
|
||||
|
||||
def test_CallAndWriteNode
|
||||
|
|
Загрузка…
Ссылка в новой задаче