summaryrefslogtreecommitdiffhomepage
path: root/src/class.c
diff options
context:
space:
mode:
authorYukihiro Matsumoto <[email protected]>2012-04-23 18:14:18 +0900
committerYukihiro Matsumoto <[email protected]>2012-04-23 18:14:18 +0900
commita45c23990bc6459af1b33e798d087bb15c0701e9 (patch)
treea781eda81c5d6028b0d89606b3334854f8c3ad8c /src/class.c
parent0e2c8ec57c80fb667204452da07a58df5db3bdb8 (diff)
downloadmruby-a45c23990bc6459af1b33e798d087bb15c0701e9.tar.gz
mruby-a45c23990bc6459af1b33e798d087bb15c0701e9.zip
fix inheritance chain; fix #41
Diffstat (limited to 'src/class.c')
-rw-r--r--src/class.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/class.c b/src/class.c
index e3fe0933a..4abd0896e 100644
--- a/src/class.c
+++ b/src/class.c
@@ -111,7 +111,12 @@ make_metaclass(mrb_state *mrb, struct RClass *c)
}
sc = mrb_obj_alloc(mrb, MRB_TT_SCLASS, mrb->class_class);
sc->mt = 0;
- sc->super = c->c;
+ if (!c->super) {
+ sc->super = mrb->class_class;
+ }
+ else {
+ sc->super = c->super->c;
+ }
c->c = sc;
mrb_field_write_barrier(mrb, (struct RBasic*)c, (struct RBasic*)sc);
mrb_field_write_barrier(mrb, (struct RBasic*)sc, (struct RBasic*)sc->super);
@@ -851,7 +856,6 @@ struct RClass *
mrb_module_new(mrb_state *mrb)
{
struct RClass *m = mrb_obj_alloc(mrb, MRB_TT_MODULE, mrb->module_class);
- make_metaclass(mrb, m);
return m;
}