diff options
| author | Yukihiro Matsumoto <[email protected]> | 2012-04-23 18:14:18 +0900 |
|---|---|---|
| committer | Yukihiro Matsumoto <[email protected]> | 2012-04-23 18:14:18 +0900 |
| commit | a45c23990bc6459af1b33e798d087bb15c0701e9 (patch) | |
| tree | a781eda81c5d6028b0d89606b3334854f8c3ad8c | |
| parent | 0e2c8ec57c80fb667204452da07a58df5db3bdb8 (diff) | |
| download | mruby-a45c23990bc6459af1b33e798d087bb15c0701e9.tar.gz mruby-a45c23990bc6459af1b33e798d087bb15c0701e9.zip | |
fix inheritance chain; fix #41
| -rw-r--r-- | src/class.c | 8 |
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; } |
