diff options
author | (no author) <(no author)@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 1998-02-10 08:44:05 +0000 |
---|---|---|
committer | (no author) <(no author)@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 1998-02-10 08:44:05 +0000 |
commit | 36f3603cae6536e571220721e916b8d284cf0675 (patch) | |
tree | eb9605811483000f6980263aa163b4f627ab1c3f /class.c | |
parent | fd1d8cdc09ed86e4a0812120a17ff0d7b04adcaf (diff) |
This commit was manufactured by cvs2svn to create tag 'v1_1b7'.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/tags/v1_1b7@70 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'class.c')
-rw-r--r-- | class.c | 44 |
1 files changed, 25 insertions, 19 deletions
@@ -95,11 +95,11 @@ rb_define_class_id(id, super) klass = class_new(super); rb_name_class(klass, id); /* make metaclass */ - RBASIC(klass)->class = singleton_class_new(RBASIC(super)->class); - singleton_class_attached(RBASIC(klass)->class, klass); + RBASIC(klass)->klass = singleton_class_new(RBASIC(super)->klass); + singleton_class_attached(RBASIC(klass)->klass, klass); rb_funcall(super, rb_intern("inherited"), 1, klass); - return (VALUE)klass; + return klass; } VALUE @@ -201,10 +201,10 @@ include_class_new(module, super) klass->iv_tbl = RCLASS(module)->iv_tbl; klass->super = super; if (TYPE(module) == T_ICLASS) { - RBASIC(klass)->class = RBASIC(module)->class; + RBASIC(klass)->klass = RBASIC(module)->klass; } else { - RBASIC(klass)->class = module; + RBASIC(klass)->klass = module; } return (VALUE)klass; @@ -253,7 +253,7 @@ mod_included_modules(mod) for (p = RCLASS(mod)->super; p; p = RCLASS(p)->super) { if (BUILTIN_TYPE(p) == T_ICLASS) { - ary_push(ary, RBASIC(p)->class); + ary_push(ary, RBASIC(p)->klass); } } return ary; @@ -267,8 +267,10 @@ mod_ancestors(mod) VALUE p; for (p = mod; p; p = RCLASS(p)->super) { + if (FL_TEST(p, FL_SINGLETON)) + continue; if (BUILTIN_TYPE(p) == T_ICLASS) { - ary_push(ary, RBASIC(p)->class); + ary_push(ary, RBASIC(p)->klass); } else { ary_push(ary, p); @@ -419,25 +421,29 @@ rb_define_method(klass, name, func, argc) VALUE (*func)(); int argc; { - rb_add_method(klass, rb_intern(name), NEW_CFUNC(func, argc), NOEX_PUBLIC); + ID id = rb_intern(name); + + rb_add_method(klass, id, NEW_CFUNC(func, argc), + (name[0] == 'i' && id == rb_intern("initialize"))? + NOEX_PRIVATE:NOEX_PUBLIC); } void -rb_undef_method(klass, name) +rb_define_private_method(klass, name, func, argc) VALUE klass; char *name; + VALUE (*func)(); + int argc; { - rb_add_method(klass, rb_intern(name), 0, NOEX_PUBLIC); + rb_add_method(klass, rb_intern(name), NEW_CFUNC(func, argc), NOEX_PRIVATE); } void -rb_define_private_method(klass, name, func, argc) +rb_undef_method(klass, name) VALUE klass; char *name; - VALUE (*func)(); - int argc; { - rb_add_method(klass, rb_intern(name), NEW_CFUNC(func, argc), NOEX_PRIVATE); + rb_add_method(klass, rb_intern(name), 0, NOEX_PUBLIC); } VALUE @@ -447,12 +453,12 @@ rb_singleton_class(obj) if (rb_special_const_p(obj)) { TypeError("cannot define singleton"); } - if (FL_TEST(RBASIC(obj)->class, FL_SINGLETON)) { - return (VALUE)RBASIC(obj)->class; + if (FL_TEST(RBASIC(obj)->klass, FL_SINGLETON)) { + return RBASIC(obj)->klass; } - RBASIC(obj)->class = singleton_class_new(RBASIC(obj)->class); - singleton_class_attached(RBASIC(obj)->class, obj); - return RBASIC(obj)->class; + RBASIC(obj)->klass = singleton_class_new(RBASIC(obj)->klass); + singleton_class_attached(RBASIC(obj)->klass, obj); + return RBASIC(obj)->klass; } void |