summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2006-02-17 08:40:52 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2006-02-17 08:40:52 +0000
commitccf99b9ce600ceb1f0360db7af4164a916f03882 (patch)
tree3603c905bbb81de90e8de49e1b476c96137a7370 /eval.c
parentd0a3c64fb4af21a911f2b7553bbddb45dd9e4484 (diff)
* eval.c (ev_const_get): simplified using rb_const_get_fallback().
* eval.c (ev_const_defined): adopt to ev_const_get() using rb_const_defined_fallback(). * variable.c (rb_const_get_fallback): new function to implement constant search. * variable.c (rb_const_defined_fallback): new function to implement constant definition check. * variable.c (rb_const_get_0): adopt to new behavior. constants are looked up in the order of: current class, super classes (but Object), lexically external classes/modules, and Object. * variable.c (rb_const_defined_0): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@9949 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c36
1 files changed, 2 insertions, 34 deletions
diff --git a/eval.c b/eval.c
index 4cded4980c..1b411fa161 100644
--- a/eval.c
+++ b/eval.c
@@ -1776,45 +1776,13 @@ ruby_current_class_object()
static VALUE
ev_const_defined(ID id, VALUE self)
{
- NODE *cbase = ruby_cref;
- VALUE result;
-
- while (cbase && cbase->nd_next) {
- struct RClass *klass = RCLASS(cbase->nd_clss);
-
- if (NIL_P(klass)) return rb_const_defined(CLASS_OF(self), id);
- if (klass->iv_tbl && st_lookup(klass->iv_tbl, id, &result)) {
- if (result == Qundef && NIL_P(rb_autoload_p((VALUE)klass, id))) {
- return Qfalse;
- }
- return Qtrue;
- }
- cbase = cbase->nd_next;
- }
- return rb_const_defined(ruby_cbase, id);
+ return rb_const_defined_fallback(ruby_cbase, id, ruby_cref->nd_next);
}
static VALUE
ev_const_get(ID id, VALUE self)
{
- NODE *cbase = ruby_cref;
- VALUE result;
-
- while (cbase && cbase->nd_next) {
- VALUE klass = cbase->nd_clss;
-
- if (NIL_P(klass)) return rb_const_get(CLASS_OF(self), id);
- while (RCLASS(klass)->iv_tbl &&
- st_lookup(RCLASS(klass)->iv_tbl, id, &result)) {
- if (result == Qundef) {
- if (!RTEST(rb_autoload_load(klass, id))) break;
- continue;
- }
- return result;
- }
- cbase = cbase->nd_next;
- }
- return rb_const_get(ruby_cbase, id);
+ return rb_const_get_fallback(ruby_cbase, id, ruby_cref->nd_next);
}
static VALUE