summaryrefslogtreecommitdiff
path: root/class.c
diff options
context:
space:
mode:
Diffstat (limited to 'class.c')
-rw-r--r--class.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/class.c b/class.c
index 9d9d3660ca..d55c37e991 100644
--- a/class.c
+++ b/class.c
@@ -147,11 +147,12 @@ rb_make_metaclass(obj, super)
FL_SET(klass, FL_SINGLETON);
RBASIC(obj)->klass = klass;
rb_singleton_class_attached(klass, obj);
- if (BUILTIN_TYPE(obj) == T_CLASS) {
+ if (BUILTIN_TYPE(obj) == T_CLASS && FL_TEST(obj, FL_SINGLETON)) {
RBASIC(klass)->klass = klass;
- if (FL_TEST(obj, FL_SINGLETON)) {
- RCLASS(klass)->super = RBASIC(rb_class_real(RCLASS(obj)->super))->klass;
- }
+ RCLASS(klass)->super = RBASIC(rb_class_real(RCLASS(obj)->super))->klass;
+ }
+ else {
+ RBASIC(klass)->klass = RBASIC(rb_class_real(super))->klass;
}
return klass;
@@ -699,8 +700,7 @@ rb_singleton_class(obj)
DEFER_INTS;
if (FL_TEST(RBASIC(obj)->klass, FL_SINGLETON) &&
- (BUILTIN_TYPE(obj) == T_CLASS || /* metaclass (or metaclass of metaclass) */
- rb_iv_get(RBASIC(obj)->klass, "__attached__") == obj)) {
+ rb_iv_get(RBASIC(obj)->klass, "__attached__") == obj) {
klass = RBASIC(obj)->klass;
}
else {