summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-06-01 08:25:05 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-06-01 08:25:05 +0000
commit4a223fb67f31a1a85a0b4fb019a1106532a541ce (patch)
tree6771eaa4bb34b39a36d359cac45a5bcb6b3783c2
parent06c7ede25923582b7f61c85920cd195b3c0447ce (diff)
compile.c: not simple if keyword args
* compile.c (iseq_set_arguments): not a simple single argument if any keyword arguments exist. [ruby-core:55203] [Bug #8463] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41021 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rw-r--r--compile.c3
-rw-r--r--test/ruby/test_keyword.rb2
3 files changed, 8 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 82ca655403..18eab62e9d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,7 @@
-Sat Jun 1 17:21:24 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat Jun 1 17:24:47 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * compile.c (iseq_set_arguments): not a simple single argument if any
+ keyword arguments exist. [ruby-core:55203] [Bug #8463]
* vm_insnhelper.c (vm_yield_setup_block_args): split single parameter
if any keyword arguments exist, and then extract keyword arguments.
diff --git a/compile.c b/compile.c
index 70db48c6a0..e0ca056cd1 100644
--- a/compile.c
+++ b/compile.c
@@ -1276,7 +1276,8 @@ iseq_set_arguments(rb_iseq_t *iseq, LINK_ANCHOR *optargs, NODE *node_args)
}
if (iseq->type == ISEQ_TYPE_BLOCK) {
- if (iseq->arg_opts == 0 && iseq->arg_post_len == 0 && iseq->arg_rest == -1) {
+ if (iseq->arg_opts == 0 && iseq->arg_post_len == 0 &&
+ iseq->arg_rest == -1 && iseq->arg_keyword == -1) {
if (iseq->argc == 1 && last_comma == 0) {
/* {|a|} */
iseq->arg_simple |= 0x02;
diff --git a/test/ruby/test_keyword.rb b/test/ruby/test_keyword.rb
index 4ff7c40321..c21afe4495 100644
--- a/test/ruby/test_keyword.rb
+++ b/test/ruby/test_keyword.rb
@@ -271,6 +271,8 @@ class TestKeywordArguments < Test::Unit::TestCase
assert_equal(expect, pr.call(expect), bug8463)
pr = proc {|a, *b, **opt| next a, *b, opt}
assert_equal(expect, pr.call(expect), bug8463)
+ pr = proc {|a, **opt| next a, opt}
+ assert_equal(expect.values_at(0, -1), pr.call(expect), bug8463)
end
def test_bare_kwrest