diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-08-06 02:34:36 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-08-06 02:34:36 +0000 |
commit | cc48423ead1d9e4b46dfeca7a45437793fc29521 (patch) | |
tree | 6fd5743695eeb2d7c0323e10938867ca60b68fe1 | |
parent | 7c5336b8f9f2e012194aed09658fdbeb3d6fe3de (diff) | |
download | ruby-cc48423ead1d9e4b46dfeca7a45437793fc29521.tar.gz |
insns.def: use klass in cfp
* insns.def (defined): now should use klass in the current control
frame to search superclass, not me->klass. reported by naruse.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36637 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | insns.def | 2 | ||||
-rw-r--r-- | test/ruby/test_defined.rb | 18 |
3 files changed, 24 insertions, 1 deletions
@@ -1,3 +1,8 @@ +Mon Aug 6 11:34:33 2012 Nobuyoshi Nakada <nobu@ruby-lang.org> + + * insns.def (defined): now should use klass in the current control + frame to search superclass, not me->klass. reported by naruse. + Mon Aug 6 11:19:19 2012 NAKAMURA Usaku <usa@ruby-lang.org> * test/etc/test_etc.rb (TestEtc#test_getpwuid): `s' is never set to nil. @@ -828,7 +828,7 @@ defined case DEFINED_ZSUPER:{ const rb_method_entry_t *me = GET_CFP()->me; if (me) { - VALUE klass = vm_search_normal_superclass(me->klass); + VALUE klass = vm_search_normal_superclass(GET_CFP()->klass); ID id = me->def ? me->def->original_id : me->called_id; if (rb_method_boundp(klass, id, 0)) { expr_type = "super"; diff --git a/test/ruby/test_defined.rb b/test/ruby/test_defined.rb index 99c866fc2d..c02d1376b2 100644 --- a/test/ruby/test_defined.rb +++ b/test/ruby/test_defined.rb @@ -152,4 +152,22 @@ class TestDefined < Test::Unit::TestCase assert_equal("super", aa.f, bug6644) assert_nil(a.f, bug6644) end + + def test_super_in_included_method + c0 = Class.new do + def m + end + end + m1 = Module.new do + def m + defined?(super) + end + end + c = Class.new(c0) do include m1 + def m + super + end + end + assert_equal("super", c.new.m) + end end |