[PRISM] Fix keyword arguments in IndexOrWriteNode

Fixes ruby/prism#2236.
This commit is contained in:
Peter Zhu 2024-01-22 13:52:41 -05:00 committed by Aaron Patterson
parent 1838dbf6e7
commit 708fa77404
2 changed files with 11 additions and 2 deletions

View File

@ -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_LABEL(ret, label);
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);
return;

View File

@ -425,6 +425,15 @@ module Prism
hash
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
assert_prism_eval(<<~RUBY)
h = Object.new