From a22cbaa697e28789acfba1204f502d62e4db8fab Mon Sep 17 00:00:00 2001 From: matz Date: Tue, 13 Mar 2001 09:00:01 +0000 Subject: * eval.c (ev_const_defined): add new parameter self for special const fallback. * eval.c (ev_const_get): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@1250 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- eval.c | 35 ++++++++--------------------------- 1 file changed, 8 insertions(+), 27 deletions(-) (limited to 'eval.c') diff --git a/eval.c b/eval.c index cb892cd1d1..1a31db425d 100644 --- a/eval.c +++ b/eval.c @@ -1422,16 +1422,17 @@ superclass(self, node) #define ruby_cbase (RNODE(ruby_frame->cbase)->nd_clss) static VALUE -ev_const_defined(cref, id) +ev_const_defined(cref, id, self) NODE *cref; ID id; + VALUE self; { NODE *cbase = cref; while (cbase && cbase->nd_clss != rb_cObject) { struct RClass *klass = RCLASS(cbase->nd_clss); - if (NIL_P(klass)) return rb_const_defined(rb_cObject, id); + if (NIL_P(klass)) return rb_const_defined(CLASS_OF(self), id); if (klass->iv_tbl && st_lookup(klass->iv_tbl, id, 0)) { return Qtrue; } @@ -1441,9 +1442,10 @@ ev_const_defined(cref, id) } static VALUE -ev_const_get(cref, id) +ev_const_get(cref, id, self) NODE *cref; ID id; + VALUE self; { NODE *cbase = cref; VALUE result; @@ -1451,7 +1453,7 @@ ev_const_get(cref, id) while (cbase && cbase->nd_clss != rb_cObject) { struct RClass *klass = RCLASS(cbase->nd_clss); - if (NIL_P(klass)) return rb_const_get(rb_cObject, id); + if (NIL_P(klass)) return rb_const_get(CLASS_OF(self), id); if (klass->iv_tbl && st_lookup(klass->iv_tbl, id, &result)) { return result; } @@ -1460,27 +1462,6 @@ ev_const_get(cref, id) return rb_const_get(cref->nd_clss, id); } -static VALUE -ev_const_set(cref, id, val) - NODE *cref; - ID id; - VALUE val; -{ - NODE *cbase = cref; - - while (cbase && cbase->nd_clss != rb_cObject) { - struct RClass *klass = RCLASS(cbase->nd_clss); - - if (klass->iv_tbl && st_lookup(klass->iv_tbl, id, 0)) { - st_insert(klass->iv_tbl, id, val); - return val; - } - cbase = cbase->nd_next; - } - rb_const_assign(cbase->nd_clss, id, val); - return val; -} - static VALUE rb_mod_nesting() { @@ -1826,7 +1807,7 @@ is_defined(self, node, buf) break; case NODE_CONST: - if (ev_const_defined(RNODE(ruby_frame->cbase), node->nd_vid)) { + if (ev_const_defined(RNODE(ruby_frame->cbase), node->nd_vid, self)) { return "constant"; } break; @@ -2738,7 +2719,7 @@ rb_eval(self, n) break; case NODE_CONST: - result = ev_const_get(RNODE(ruby_frame->cbase), node->nd_vid); + result = ev_const_get(RNODE(ruby_frame->cbase), node->nd_vid, self); break; case NODE_CVAR: /* normal method */ -- cgit v1.2.3