parent
f2149dc094
commit
45dd8edf82
@ -2645,9 +2645,17 @@ pm_compile_call(rb_iseq_t *iseq, const pm_call_node_t *call_node, LINK_ANCHOR *c
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (pm_node->flags & PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE) {
|
if (pm_node->flags & PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE) {
|
||||||
if (!popped) {
|
if (flags & VM_CALL_ARGS_SPLAT) {
|
||||||
|
ADD_INSN(ret, &dummy_line_node, dup);
|
||||||
|
ADD_INSN1(ret, &dummy_line_node, putobject, INT2FIX(-1));
|
||||||
|
ADD_SEND_WITH_FLAG(ret, &dummy_line_node, idAREF, INT2FIX(1), INT2FIX(0));
|
||||||
|
ADD_INSN1(ret, &dummy_line_node, setn, INT2FIX(orig_argc + 2));
|
||||||
|
ADD_INSN (ret, &dummy_line_node, pop);
|
||||||
|
}
|
||||||
|
else if (!popped) {
|
||||||
ADD_INSN1(ret, &dummy_line_node, setn, INT2FIX(orig_argc + 1));
|
ADD_INSN1(ret, &dummy_line_node, setn, INT2FIX(orig_argc + 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
ADD_SEND_R(ret, &dummy_line_node, method_id, INT2FIX(orig_argc), block_iseq, INT2FIX(flags), kw_arg);
|
ADD_SEND_R(ret, &dummy_line_node, method_id, INT2FIX(orig_argc), block_iseq, INT2FIX(flags), kw_arg);
|
||||||
PM_POP_UNLESS_POPPED;
|
PM_POP_UNLESS_POPPED;
|
||||||
}
|
}
|
||||||
|
@ -1484,6 +1484,13 @@ module Prism
|
|||||||
foo.[]=(1,2)
|
foo.[]=(1,2)
|
||||||
CODE
|
CODE
|
||||||
|
|
||||||
|
# With splat inside of []=
|
||||||
|
assert_prism_eval(<<~RUBY)
|
||||||
|
obj = Object.new
|
||||||
|
def obj.[]=(a, b); 10; end
|
||||||
|
obj[*[1]] = 3
|
||||||
|
RUBY
|
||||||
|
|
||||||
assert_prism_eval(<<-CODE)
|
assert_prism_eval(<<-CODE)
|
||||||
def self.prism_opt_var_trail_hash(a = nil, *b, c, **d); end
|
def self.prism_opt_var_trail_hash(a = nil, *b, c, **d); end
|
||||||
prism_opt_var_trail_hash("a")
|
prism_opt_var_trail_hash("a")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user