summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/class.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/src/class.c b/src/class.c
index a50d3d85a..787e514b1 100644
--- a/src/class.c
+++ b/src/class.c
@@ -69,15 +69,14 @@ prepare_singleton_class(mrb_state *mrb, struct RBasic *o)
sc->iv = 0;
if (o->tt == MRB_TT_CLASS) {
c = (struct RClass*)o;
- if (!c->super) {
- sc->super = mrb->class_class;
- }
- else {
+ if (c->super) {
sc->super = c->super->c;
}
}
else if (o->tt == MRB_TT_SCLASS) {
c = (struct RClass*)o;
+ while (c->super->tt == MRB_TT_ICLASS)
+ c = c->super;
make_metaclass(mrb, c->super);
sc->super = c->super->c;
}