diff --git a/ext/-test-/proc/call_super.c b/ext/-test-/proc/call_super.c index c5cb3eb46a..c1f3088531 100644 --- a/ext/-test-/proc/call_super.c +++ b/ext/-test-/proc/call_super.c @@ -1,12 +1,17 @@ #include "ruby.h" static VALUE -bug_proc_call_super(VALUE yieldarg, VALUE procarg) +bug_proc_call_super(RB_BLOCK_CALL_FUNC_ARGLIST(yieldarg, procarg)) { VALUE args[2]; + VALUE ret; args[0] = yieldarg; args[1] = procarg; - return rb_call_super(2, args); + ret = rb_call_super(2, args); + if (!NIL_P(blockarg)) { + ret = rb_proc_call(blockarg, ret); + } + return ret; } static VALUE diff --git a/test/-ext-/proc/test_bmethod.rb b/test/-ext-/proc/test_bmethod.rb index 09f52140b9..2d68adc1b9 100644 --- a/test/-ext-/proc/test_bmethod.rb +++ b/test/-ext-/proc/test_bmethod.rb @@ -21,4 +21,11 @@ class TestProc::TestBMethod obj = Bound.new assert_equal([1, 42], obj.foo(1)) end + + def test_block_super + obj = Bound.new + result = nil + obj.foo(2) {|*a| result = a} + assert_equal([2, 42], result) + end end