mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* vm_insnhelper.c (vm_search_super_method): use ci->argc instead of
ci->orig_argc. ci->argc can be changed by splat arguments. [ruby-list:49575] This fix should be applied to Ruby 2.0.0 seriese. * test/ruby/test_super.rb: add a test for above. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42782 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
fd4b5b8dc8
commit
41234c5ca3
3 changed files with 33 additions and 1 deletions
|
@ -1,3 +1,12 @@
|
|||
Tue Sep 3 03:17:26 2013 Koichi Sasada <ko1@atdot.net>
|
||||
|
||||
* vm_insnhelper.c (vm_search_super_method): use ci->argc instead of
|
||||
ci->orig_argc. ci->argc can be changed by splat arguments.
|
||||
[ruby-list:49575]
|
||||
This fix should be applied to Ruby 2.0.0 seriese.
|
||||
|
||||
* test/ruby/test_super.rb: add a test for above.
|
||||
|
||||
Mon Sep 2 23:46:29 2013 Akinori MUSHA <knu@iDaemons.org>
|
||||
|
||||
* numeric.c (num_step): Default the limit argument to infinity and
|
||||
|
|
|
@ -385,4 +385,27 @@ class TestSuper < Test::Unit::TestCase
|
|||
def test_super_in_BEGIN
|
||||
assert_super_in_block("BEGIN")
|
||||
end
|
||||
|
||||
class X
|
||||
def foo(*args)
|
||||
args
|
||||
end
|
||||
end
|
||||
|
||||
class Y < X
|
||||
define_method(:foo) do |*args|
|
||||
super(*args)
|
||||
end
|
||||
end
|
||||
|
||||
def test_super_splat
|
||||
# [ruby-list:49575]
|
||||
y = Y.new
|
||||
assert_equal([1, 2], y.foo(1, 2))
|
||||
assert_equal([1, false], y.foo(1, false))
|
||||
assert_equal([1, 2, 3, 4, 5], y.foo(1, 2, 3, 4, 5))
|
||||
assert_equal([false, true], y.foo(false, true))
|
||||
assert_equal([false, false], y.foo(false, false))
|
||||
assert_equal([1, 2, 3, false, 5], y.foo(1, 2, 3, false, 5))
|
||||
end
|
||||
end
|
||||
|
|
|
@ -2016,7 +2016,7 @@ vm_search_super_method(rb_thread_t *th, rb_control_frame_t *reg_cfp, rb_call_inf
|
|||
{
|
||||
VALUE current_defined_class;
|
||||
rb_iseq_t *iseq = GET_ISEQ();
|
||||
VALUE sigval = TOPN(ci->orig_argc);
|
||||
VALUE sigval = TOPN(ci->argc);
|
||||
|
||||
current_defined_class = GET_CFP()->klass;
|
||||
if (NIL_P(current_defined_class)) {
|
||||
|
|
Loading…
Add table
Reference in a new issue