diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2015-09-05 02:04:20 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2015-09-05 02:04:20 +0900 |
| commit | 1cbbb7e11c02d381a6b76aeebae8db0f54ae9baf (patch) | |
| tree | 2fba1fb5daaa28fc3eda22ca23bf7303c05d7641 /src/gc.c | |
| parent | 2f1a031fcd53b71415ae6d2b26b56c2c3efb8717 (diff) | |
| parent | 2550edd570f1d7485e862ce11ceb50ea59dee3c5 (diff) | |
| download | mruby-1cbbb7e11c02d381a6b76aeebae8db0f54ae9baf.tar.gz mruby-1cbbb7e11c02d381a6b76aeebae8db0f54ae9baf.zip | |
Merge branch 'polyfox-module-prepend'
Diffstat (limited to 'src/gc.c')
| -rw-r--r-- | src/gc.c | 12 |
1 files changed, 10 insertions, 2 deletions
@@ -498,7 +498,12 @@ gc_mark_children(mrb_state *mrb, struct RBasic *obj) mrb_gc_mark(mrb, (struct RBasic*)obj->c); switch (obj->tt) { case MRB_TT_ICLASS: - mrb_gc_mark(mrb, (struct RBasic*)((struct RClass*)obj)->super); + { + struct RClass *c = (struct RClass*)obj; + if (MRB_FLAG_TEST(c, MRB_FLAG_IS_ORIGIN)) + mrb_gc_mark_mt(mrb, c); + mrb_gc_mark(mrb, (struct RBasic*)((struct RClass*)obj)->super); + } break; case MRB_TT_CLASS: @@ -624,7 +629,10 @@ obj_free(mrb_state *mrb, struct RBasic *obj) mrb_gc_free_mt(mrb, (struct RClass*)obj); mrb_gc_free_iv(mrb, (struct RObject*)obj); break; - + case MRB_TT_ICLASS: + if (MRB_FLAG_TEST(obj, MRB_FLAG_IS_ORIGIN)) + mrb_gc_free_mt(mrb, (struct RClass*)obj); + break; case MRB_TT_ENV: { struct REnv *e = (struct REnv*)obj; |
