diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-08-10 00:50:45 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-08-10 00:50:45 +0000 |
commit | 9ad2ccfe38cb075ea3bf6656f3ca4f7a0099e2aa (patch) | |
tree | 09583b6964ad4d7fd5d8162c8858cc812e59ff7e | |
parent | 5ebfe15384e4f62ef91f53e218d71a575b54f58e (diff) | |
download | ruby-9ad2ccfe38cb075ea3bf6656f3ca4f7a0099e2aa.tar.gz |
compile.c: fix KW_SPLAT flag condition
* compile.c (compile_array_keyword_arg): fix the condition of
KW_SPLAT flag. splat is value node only without key node,
simple assoc argument is not. [ruby-core:82291] [Bug #13793]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59556 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | compile.c | 7 | ||||
-rw-r--r-- | test/ruby/test_keyword.rb | 2 |
2 files changed, 7 insertions, 2 deletions
@@ -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 |