diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-09-02 05:36:49 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-09-02 05:36:49 +0000 |
commit | 7dddaf680710795bba628db7ca02f4d3f1a57b1c (patch) | |
tree | e53fcda157022f459185c63023a2064bbea55a6a /insns.def | |
parent | 5e14b979476566916d2ff0dd255a6d1694ac7166 (diff) | |
download | ruby-7dddaf680710795bba628db7ca02f4d3f1a57b1c.tar.gz |
* vm_insnhelper.c (vm_search_const_defined_class): search
ancestors only when global scope. [ruby-core:39227] [Bug #5264]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@33163 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'insns.def')
-rw-r--r-- | insns.def | 10 |
1 files changed, 4 insertions, 6 deletions
@@ -895,7 +895,6 @@ defineclass (VALUE val) { VALUE klass; - int newclass = 1; switch ((int)define_type) { case 0: /* scoped: class Foo::Bar */ @@ -904,16 +903,15 @@ defineclass if (super == Qnil) { super = rb_cObject; - newclass = 0; } vm_check_if_namespace(cbase); /* find klass */ rb_autoload_load(cbase, id); - if (vm_const_defined_at(cbase, id, newclass)) { + if ((klass = vm_search_const_defined_class(cbase, id)) != 0) { /* already exist */ - klass = define_type == 0 ? rb_public_const_get(cbase, id) : rb_const_get_from(cbase, id); + klass = define_type == 0 ? rb_public_const_get_at(klass, id) : rb_const_get_at(klass, id); if (TYPE(klass) != T_CLASS) { rb_raise(rb_eTypeError, "%s is not a class", rb_id2name(id)); } @@ -949,8 +947,8 @@ defineclass vm_check_if_namespace(cbase); /* find klass */ - if (vm_const_defined_at(cbase, id, 0)) { - klass = define_type == 2 ? rb_public_const_get(cbase, id) : rb_const_get_from(cbase, id); + if ((klass = vm_search_const_defined_class(cbase, id)) != 0) { + klass = define_type == 2 ? rb_public_const_get_at(klass, id) : rb_const_get_at(klass, id); /* already exist */ if (TYPE(klass) != T_MODULE) { rb_raise(rb_eTypeError, "%s is not a module", rb_id2name(id)); |