mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
compile.c: forward kwrest
* compile.c (iseq_compile_each): forward anonymous and first keyword rest argument one. [ruby-core:55033] [Bug #8416]. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@40807 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
3e8bba2fc1
commit
e38a2399d2
3 changed files with 36 additions and 1 deletions
|
@ -1,3 +1,8 @@
|
||||||
|
Sat May 18 16:38:39 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
|
* compile.c (iseq_compile_each): forward anonymous and first keyword
|
||||||
|
rest argument one. [ruby-core:55033] [Bug #8416].
|
||||||
|
|
||||||
Sat May 18 15:49:14 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
Sat May 18 15:49:14 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
* vm_core.h (rb_vm_tag): move jmpbuf between tag and prev so ensure to
|
* vm_core.h (rb_vm_tag): move jmpbuf between tag and prev so ensure to
|
||||||
|
|
|
@ -4485,7 +4485,7 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (liseq->arg_keyword > 0) {
|
if (liseq->arg_keyword >= 0) {
|
||||||
int local_size = liseq->local_size;
|
int local_size = liseq->local_size;
|
||||||
int idx = local_size - liseq->arg_keyword;
|
int idx = local_size - liseq->arg_keyword;
|
||||||
argc++;
|
argc++;
|
||||||
|
|
|
@ -349,4 +349,34 @@ class TestKeywordArguments < Test::Unit::TestCase
|
||||||
assert_equal([42, {:bar=>"x"}], a.new.foo(42), bug8236)
|
assert_equal([42, {:bar=>"x"}], a.new.foo(42), bug8236)
|
||||||
assert_equal([42, {:bar=>"x"}], b.new.foo(42), bug8236)
|
assert_equal([42, {:bar=>"x"}], b.new.foo(42), bug8236)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_zsuper_only_named_kwrest
|
||||||
|
bug8416 = '[ruby-core:55033] [Bug #8416]'
|
||||||
|
base = Class.new do
|
||||||
|
def foo(**h)
|
||||||
|
h
|
||||||
|
end
|
||||||
|
end
|
||||||
|
a = Class.new(base) do
|
||||||
|
def foo(**h)
|
||||||
|
super
|
||||||
|
end
|
||||||
|
end
|
||||||
|
assert_equal({:bar=>"x"}, a.new.foo(bar: "x"), bug8416)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_zsuper_only_anonymous_kwrest
|
||||||
|
bug8416 = '[ruby-core:55033] [Bug #8416]'
|
||||||
|
base = Class.new do
|
||||||
|
def foo(**h)
|
||||||
|
h
|
||||||
|
end
|
||||||
|
end
|
||||||
|
a = Class.new(base) do
|
||||||
|
def foo(**)
|
||||||
|
super
|
||||||
|
end
|
||||||
|
end
|
||||||
|
assert_equal({:bar=>"x"}, a.new.foo(bar: "x"), bug8416)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue