summaryrefslogtreecommitdiff
path: root/class.c
diff options
context:
space:
mode:
Diffstat (limited to 'class.c')
-rw-r--r--class.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/class.c b/class.c
index 7fdfac8813..59f608732f 100644
--- a/class.c
+++ b/class.c
@@ -159,24 +159,24 @@ VALUE
rb_make_metaclass(obj, super)
VALUE obj, super;
{
- VALUE klass = rb_class_boot(super);
- FL_SET(klass, FL_SINGLETON);
- RBASIC(obj)->klass = klass;
- rb_singleton_class_attached(klass, obj);
if (BUILTIN_TYPE(obj) == T_CLASS && FL_TEST(obj, FL_SINGLETON)) {
- RBASIC(klass)->klass = klass;
- RCLASS(klass)->super = RBASIC(rb_class_real(RCLASS(obj)->super))->klass;
+ return RBASIC(obj)->klass = rb_cClass;
}
else {
- VALUE metasuper = RBASIC(rb_class_real(super))->klass;
+ VALUE metasuper;
+ VALUE klass = rb_class_boot(super);
+ FL_SET(klass, FL_SINGLETON);
+ RBASIC(obj)->klass = klass;
+ rb_singleton_class_attached(klass, obj);
+
+ metasuper = RBASIC(rb_class_real(super))->klass;
/* metaclass of a superclass may be NULL at boot time */
if (metasuper) {
RBASIC(klass)->klass = metasuper;
}
+ return klass;
}
-
- return klass;
}
VALUE