summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--compile.c7
-rw-r--r--test/ruby/test_keyword.rb2
2 files changed, 7 insertions, 2 deletions
diff --git a/compile.c b/compile.c
index b21f002c9d..99e00b4e6a 100644
--- a/compile.c
+++ b/compile.c
@@ -3052,11 +3052,14 @@ compile_array_keyword_arg(rb_iseq_t *iseq, LINK_ANCHOR *const ret,
NODE *key_node = node->nd_head;
assert(nd_type(node) == NODE_ARRAY);
- if (key_node && nd_type(key_node) == NODE_LIT && RB_TYPE_P(key_node->nd_lit, T_SYMBOL)) {
+ if (!key_node) {
+ if (flag) *flag |= VM_CALL_KW_SPLAT;
+ return FALSE;
+ }
+ else if (nd_type(key_node) == NODE_LIT && RB_TYPE_P(key_node->nd_lit, T_SYMBOL)) {
/* can be keywords */
}
else {
- if (flag) *flag |= VM_CALL_KW_SPLAT;
return FALSE;
}
node = node->nd_next; /* skip value node */
diff --git a/test/ruby/test_keyword.rb b/test/ruby/test_keyword.rb
index b673cb7eec..e2bdc34731 100644
--- a/test/ruby/test_keyword.rb
+++ b/test/ruby/test_keyword.rb
@@ -516,6 +516,8 @@ class TestKeywordArguments < Test::Unit::TestCase
o = {a: 42}
assert_equal({a: 42}, m.f2(**o), '[ruby-core:82280] [Bug #13791]')
+
+ assert_equal({a: 42}, m.f2("a".to_sym => 42), '[ruby-core:82291] [Bug #13793]')
end
def test_gced_object_in_stack