diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-07-01 01:36:25 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-07-01 01:36:25 +0000 |
commit | 442c836bfe7396f81a0f1f2f8daeeeabbf0d0343 (patch) | |
tree | f5366b3fb371e3a294c4d3dc6559e7bc772c4f94 | |
parent | 7bb1e40d8b5928a7d3740b72f02f6a5d5fb0d21b (diff) | |
download | ruby-442c836bfe7396f81a0f1f2f8daeeeabbf0d0343.tar.gz |
* class.c (rb_define_class, rb_define_module): also set constant under
Object. [ruby-dev:20445]
* object.c (boot_defclass): ditto.
* variable.c (rb_const_get_at, rb_const_get_0, rb_mod_const_at,
rb_const_defined, mod_av_set, rb_const_assign): toplevel constants
are now under Object, rb_class_tbl remains for GC.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@4019 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 11 | ||||
-rw-r--r-- | class.c | 2 | ||||
-rw-r--r-- | object.c | 1 | ||||
-rw-r--r-- | variable.c | 28 |
4 files changed, 15 insertions, 27 deletions
@@ -1,3 +1,14 @@ +Tue Jul 1 10:36:19 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net> + + * class.c (rb_define_class, rb_define_module): also set constant under + Object. [ruby-dev:20445] + + * object.c (boot_defclass): ditto. + + * variable.c (rb_const_get_at, rb_const_get_0, rb_mod_const_at, + rb_const_defined, mod_av_set, rb_const_assign): toplevel constants + are now under Object, rb_class_tbl remains for GC. + Mon Jun 30 17:53:06 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net> * eval.c (mnew): ignore metaclasses have no influence, for rklass. @@ -213,6 +213,7 @@ rb_define_class(name, super) } klass = rb_define_class_id(id, super); st_add_direct(rb_class_tbl, id, klass); + rb_const_set(rb_cObject, id, klass); rb_class_inherited(super, klass); return klass; @@ -292,6 +293,7 @@ rb_define_module(name) } module = rb_define_module_id(id); st_add_direct(rb_class_tbl, id, module); + rb_const_set(rb_cObject, id, module); return module; } @@ -1341,6 +1341,7 @@ boot_defclass(name, super) rb_name_class(obj, id); st_add_direct(rb_class_tbl, id, obj); + rb_const_set((rb_cObject ? rb_cObject : obj), id, obj); return obj; } diff --git a/variable.c b/variable.c index eb1f3e32bc..fcbc8cc745 100644 --- a/variable.c +++ b/variable.c @@ -1254,16 +1254,6 @@ rb_autoload_p(mod, id) return autoload_file(mod, id); } -static int -top_const_get(id, klassp) - ID id; - VALUE *klassp; -{ - /* pre-defined class */ - if (st_lookup(rb_class_tbl, id, klassp)) return Qtrue; - return Qfalse; -} - VALUE rb_const_get_at(klass, id) VALUE klass; @@ -1278,9 +1268,6 @@ rb_const_get_at(klass, id) } return value; } - if (klass == rb_cObject && top_const_get(id, &value)) { - return value; - } uninitialized_constant(klass, id); return Qnil; /* not reached */ } @@ -1308,7 +1295,6 @@ rb_const_get_0(klass, id, exclude) } return value; } - if (tmp == rb_cObject && top_const_get(id, &value)) return value; tmp = RCLASS(tmp)->super; } if (!mod_retry && BUILTIN_TYPE(klass) == T_MODULE) { @@ -1393,9 +1379,6 @@ rb_mod_const_at(mod, data) if (RCLASS(mod)->iv_tbl) { st_foreach(RCLASS(mod)->iv_tbl, sv_i, (st_data_t)tbl); } - if ((VALUE)mod == rb_cObject) { - st_foreach(rb_class_tbl, sv_i, (st_data_t)tbl); - } return tbl; } @@ -1500,8 +1483,6 @@ rb_const_defined(klass, id) if (BUILTIN_TYPE(klass) == T_MODULE) { return rb_const_defined(rb_cObject, id); } - if (st_lookup(rb_class_tbl, id, 0)) - return Qtrue; return Qfalse; } @@ -1523,8 +1504,7 @@ mod_av_set(klass, id, val, isconst) else if (isconst) { VALUE value = Qfalse; - if (st_lookup(RCLASS(klass)->iv_tbl, id, &value) || - (klass == rb_cObject && st_lookup(rb_class_tbl, id, 0))) { + if (st_lookup(RCLASS(klass)->iv_tbl, id, &value)) { if (value == Qundef) autoload_delete(klass, id); else @@ -1559,12 +1539,6 @@ rb_const_assign(klass, id, val) } tmp = RCLASS(tmp)->super; } - /* pre-defined class */ - if (st_lookup(rb_class_tbl, id, 0)) { - st_delete(rb_class_tbl, &id, 0); - st_insert(RCLASS(rb_cObject)->iv_tbl, id, val); - return; - } uninitialized_constant(klass, id); } |