diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2006-02-17 16:08:08 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2006-02-17 16:08:08 +0000 |
commit | d16c035975f45d67a09a84d3d7e574fb80aa0a55 (patch) | |
tree | c2a330f2738ea2ce499b13bb1fd7028e65b86e59 /variable.c | |
parent | 110a9f783d1ae87a059fdb20f711ef5b9b8e49cc (diff) | |
download | ruby-d16c035975f45d67a09a84d3d7e574fb80aa0a55.tar.gz |
* variable.c (rb_const_get_0): skip ruby_wrapper in const search
to give it lower priority (just above Object). need not to
change rb_const_defined_0() since it's only a precedence matter;
they are defined anyway.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@9953 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'variable.c')
-rw-r--r-- | variable.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/variable.c b/variable.c index 79e2a4f1fb..aaa3153378 100644 --- a/variable.c +++ b/variable.c @@ -1297,18 +1297,21 @@ rb_const_get_0(VALUE klass, ID id, int exclude, int recurse, NODE *fallback) if (!recurse) break; tmp = RCLASS(tmp)->super; if (tmp == rb_cObject) break; + if (ruby_wrapper && tmp && RBASIC(tmp)->klass == ruby_wrapper) { + tmp = RCLASS(tmp)->super; + } } if (recurse) { + if (!n_retry) { + n_retry = 1; + tmp = ruby_wrapper ? ruby_wrapper : rb_cObject; + goto retry; + } if (fallback) { tmp = fallback->nd_clss; fallback = fallback->nd_next; goto retry; } - if (!n_retry) { - n_retry = 1; - tmp = rb_cObject; - goto retry; - } } return const_missing(klass, id); } @@ -1464,12 +1467,11 @@ rb_const_defined_0(VALUE klass, ID id, int exclude, int recurse, NODE* fallback) } if (!recurse) break; tmp = RCLASS(tmp)->super; - if (tmp == rb_cObject) break; } if (recurse) { if (!n_retry) { n_retry = 1; - tmp = rb_cObject; + tmp = ruby_wrapper ? ruby_wrapper : rb_cObject; goto retry; } if (fallback) { |