diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2015-09-04 04:01:49 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2015-09-04 04:01:49 +0900 |
| commit | 8bb7962eb8e193e94d866626f07d52b63ff2016c (patch) | |
| tree | 71c5ca1edd8b461c2309d2c24a0b9c21753bdc59 /src/gc.c | |
| parent | 7967c76e1473a72bc91a436a16df7404dcd0caf2 (diff) | |
| parent | 26bee4a16b5763b407a842bd1697389961600d68 (diff) | |
| download | mruby-8bb7962eb8e193e94d866626f07d52b63ff2016c.tar.gz mruby-8bb7962eb8e193e94d866626f07d52b63ff2016c.zip | |
Merge branch 'module-prepend' of https://github.com/polyfox/mruby into 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; |
