summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/ruby/test_super.rb13
-rw-r--r--vm_insnhelper.c2
2 files changed, 11 insertions, 4 deletions
diff --git a/test/ruby/test_super.rb b/test/ruby/test_super.rb
index 7c4beff07b..3d5af3d485 100644
--- a/test/ruby/test_super.rb
+++ b/test/ruby/test_super.rb
@@ -585,15 +585,22 @@ class TestSuper < Test::Unit::TestCase
end
def test_super_with_define_method
- superklass = Class.new do
+ superklass1 = Class.new do
def foo; :foo; end
def bar; :bar; end
+ def boo; :boo; end
end
- subklass = Class.new(superklass)
- [:foo, :bar].each do |sym|
+ superklass2 = Class.new(superklass1) do
+ alias baz boo
+ def boo; :boo2; end
+ end
+ subklass = Class.new(superklass2)
+ [:foo, :bar, :baz, :boo].each do |sym|
subklass.define_method(sym){ super() }
end
assert_equal :foo, subklass.new.foo
assert_equal :bar, subklass.new.bar
+ assert_equal :boo, subklass.new.baz
+ assert_equal :boo2, subklass.new.boo
end
end
diff --git a/vm_insnhelper.c b/vm_insnhelper.c
index 9404b0d74a..acd5de4d5e 100644
--- a/vm_insnhelper.c
+++ b/vm_insnhelper.c
@@ -3161,7 +3161,7 @@ vm_search_super_method(const rb_control_frame_t *reg_cfp, struct rb_call_data *c
if (LIKELY(RB_DEBUG_COUNTER_INC_UNLESS(mc_global_state_miss,
GET_GLOBAL_METHOD_STATE() == cc->method_state) &&
cc->class_serial[0] == RCLASS_SERIAL(klass)) &&
- cc->me && ci->mid == cc->me->def->original_id) {
+ cc->me && ci->mid == cc->me->called_id) {
VM_ASSERT(cc->call != NULL);
RB_DEBUG_COUNTER_INC(mc_inline_hit);
return;