[PRISM] Fix keyword arguments in IndexOrWriteNode
Fixes ruby/prism#2236.
This commit is contained in:
parent
1838dbf6e7
commit
708fa77404
@ -1298,9 +1298,9 @@ pm_compile_index_and_or_write_node(bool and_node, pm_node_t *receiver, pm_node_t
|
|||||||
ADD_INSNL(ret, &dummy_line_node, jump, lfin);
|
ADD_INSNL(ret, &dummy_line_node, jump, lfin);
|
||||||
ADD_LABEL(ret, label);
|
ADD_LABEL(ret, label);
|
||||||
if (!popped) {
|
if (!popped) {
|
||||||
ADD_INSN1(ret, &dummy_line_node, setn, FIXNUM_INC(argc, 2 + block_offset));
|
ADD_INSN1(ret, &dummy_line_node, setn, FIXNUM_INC(argc, 2 + block_offset + (keywords ? keywords->keyword_len : 0)));
|
||||||
}
|
}
|
||||||
ADD_INSN1(ret, &dummy_line_node, adjuststack, FIXNUM_INC(argc, 2 + block_offset));
|
ADD_INSN1(ret, &dummy_line_node, adjuststack, FIXNUM_INC(argc, 2 + block_offset + (keywords ? keywords->keyword_len : 0)));
|
||||||
ADD_LABEL(ret, lfin);
|
ADD_LABEL(ret, lfin);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
@ -425,6 +425,15 @@ module Prism
|
|||||||
hash
|
hash
|
||||||
CODE
|
CODE
|
||||||
|
|
||||||
|
# Test with keyword arguments
|
||||||
|
assert_prism_eval(<<~RUBY)
|
||||||
|
h = Object.new
|
||||||
|
def h.[](**b) = 0
|
||||||
|
def h.[]=(*a, **b); end
|
||||||
|
|
||||||
|
h[foo: 1] ||= 2
|
||||||
|
RUBY
|
||||||
|
|
||||||
# Test with keyword splat
|
# Test with keyword splat
|
||||||
assert_prism_eval(<<~RUBY)
|
assert_prism_eval(<<~RUBY)
|
||||||
h = Object.new
|
h = Object.new
|
||||||
|
Loading…
x
Reference in New Issue
Block a user