1
0
Fork 0
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:
ko1 2013-09-02 18:21:13 +00:00
parent fd4b5b8dc8
commit 41234c5ca3
3 changed files with 33 additions and 1 deletions

View file

@ -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

View file

@ -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

View file

@ -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)) {