diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-11-07 04:20:46 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-11-07 04:20:46 +0900 |
| commit | 677a2ac22633473fb286d7297a8585c01fe7394b (patch) | |
| tree | b0052f5b50bfb490c9780c6dd0645a2742aaf655 /src/gc.c | |
| parent | e92d4e2680716d3e16a264e46394cb6e458699f9 (diff) | |
| download | mruby-677a2ac22633473fb286d7297a8585c01fe7394b.tar.gz mruby-677a2ac22633473fb286d7297a8585c01fe7394b.zip | |
irep->pool not to be GCed
Diffstat (limited to 'src/gc.c')
| -rw-r--r-- | src/gc.c | 47 |
1 files changed, 1 insertions, 46 deletions
@@ -470,31 +470,6 @@ mark_context(mrb_state *mrb, struct mrb_context *c) } } -static size_t -mark_irep_pool_size(mrb_state *mrb, mrb_irep *irep) -{ - size_t size = irep->plen; - size_t i; - - for (i=0; i<irep->rlen; i++) { - size += mark_irep_pool_size(mrb, irep->reps[i]); - } - return size; -} - -static void -mark_irep_pool(mrb_state *mrb, mrb_irep *irep) -{ - size_t i; - - for (i=0; i<irep->plen; i++) { - mrb_gc_mark_value(mrb, irep->pool[i]); - } - for (i=0; i<irep->rlen; i++) { - mark_irep_pool(mrb, irep->reps[i]); - } -} - static void gc_mark_children(mrb_state *mrb, struct RBasic *obj) { @@ -529,9 +504,6 @@ gc_mark_children(mrb_state *mrb, struct RBasic *obj) mrb_gc_mark(mrb, (struct RBasic*)p->env); mrb_gc_mark(mrb, (struct RBasic*)p->target_class); - if (!MRB_PROC_CFUNC_P(p)) { - mark_irep_pool(mrb, p->body.irep); - } } break; @@ -691,7 +663,7 @@ obj_free(mrb_state *mrb, struct RBasic *obj) static void root_scan_phase(mrb_state *mrb) { - size_t i, e, j; + size_t i, e; if (!is_minor_gc(mrb)) { mrb->gray_list = NULL; @@ -714,19 +686,6 @@ root_scan_phase(mrb_state *mrb) if (mrb->root_c != mrb->c) { mark_context(mrb, mrb->c); } - - /* mark irep pool */ - if (mrb->irep) { - size_t len = mrb->irep_len; - if (len > mrb->irep_capa) len = mrb->irep_capa; - for (i=0; i<len; i++) { - mrb_irep *irep = mrb->irep[i]; - if (!irep) continue; - for (j=0; j<irep->plen; j++) { - mrb_gc_mark_value(mrb, irep->pool[j]); - } - } - } } static size_t @@ -799,10 +758,6 @@ gc_gray_mark(mrb_state *mrb, struct RBasic *obj) break; case MRB_TT_PROC: - if (!MRB_PROC_CFUNC_P((struct RProc*)obj)) { - children += mark_irep_pool_size(mrb, ((struct RProc*)obj)->body.irep); - } - /* fall through */ case MRB_TT_RANGE: children+=2; break; |
