From 950204bc4d419fc3b2a0842eccf1d253735e7839 Mon Sep 17 00:00:00 2001 From: Yukihiro Matsumoto Date: Wed, 29 Aug 2012 11:45:36 +0900 Subject: remove flags from irep --- include/mruby/irep.h | 4 ---- src/cdump.c | 1 - src/codegen.c | 1 - src/gc.c | 7 +++++++ src/proc.c | 1 - src/state.c | 5 +---- 6 files changed, 8 insertions(+), 11 deletions(-) diff --git a/include/mruby/irep.h b/include/mruby/irep.h index af3346c0a..720301648 100644 --- a/include/mruby/irep.h +++ b/include/mruby/irep.h @@ -14,7 +14,6 @@ extern "C" { typedef struct mrb_irep { int idx; - int flags; int nlocals; int nregs; @@ -25,9 +24,6 @@ typedef struct mrb_irep { int ilen, plen, slen; } mrb_irep; -#define MRB_IREP_NOFREE 3 -#define MRB_ISEQ_NOFREE 1 - void mrb_add_irep(mrb_state *mrb, int n); #if defined(__cplusplus) diff --git a/src/cdump.c b/src/cdump.c index f21a735ab..ba05a1899 100644 --- a/src/cdump.c +++ b/src/cdump.c @@ -114,7 +114,6 @@ make_cdump_irep(mrb_state *mrb, int irep_no, FILE *f) SOURCE_CODE0 (" ai = mrb->arena_idx;"); SOURCE_CODE0 (" irep = mrb->irep[idx] = mrb_malloc(mrb, sizeof(mrb_irep));"); SOURCE_CODE0 (" irep->idx = idx++;"); - SOURCE_CODE (" irep->flags = %d | MRB_ISEQ_NOFREE;", irep->flags); SOURCE_CODE (" irep->nlocals = %d;", irep->nlocals); SOURCE_CODE (" irep->nregs = %d;", irep->nregs); SOURCE_CODE (" irep->ilen = %d;", irep->ilen); diff --git a/src/codegen.c b/src/codegen.c index cb625f77a..17608e10f 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -2055,7 +2055,6 @@ scope_finish(codegen_scope *s, int idx) irep = mrb->irep[idx] = (mrb_irep *)mrb_malloc(mrb, sizeof(mrb_irep)); irep->idx = idx; - irep->flags = 0; if (s->iseq) { irep->iseq = (mrb_code *)codegen_realloc(s, s->iseq, sizeof(mrb_code)*s->pc); irep->ilen = s->pc; diff --git a/src/gc.c b/src/gc.c index 006edea8e..46699aea3 100644 --- a/src/gc.c +++ b/src/gc.c @@ -284,15 +284,22 @@ mrb_init_heap(mrb_state *mrb) #endif } +static void obj_free(mrb_state *mrb, struct RBasic *obj); + void mrb_free_heap(mrb_state *mrb) { struct heap_page *page = mrb->heaps; struct heap_page *tmp; + RVALUE *p, *e; while (page) { tmp = page; page = page->next; + for (p = tmp->objects, e=p+MRB_HEAP_PAGE_SIZE; pas.free.tt != MRB_TT_FREE) + obj_free(mrb, &p->as.basic); + } mrb_free(mrb, tmp); } } diff --git a/src/proc.c b/src/proc.c index e5c233e1b..44c712a95 100644 --- a/src/proc.c +++ b/src/proc.c @@ -152,7 +152,6 @@ mrb_init_proc(mrb_state *mrb) *call_iseq = MKOP_A(OP_CALL, 0); call_irep->idx = -1; - call_irep->flags = MRB_IREP_NOFREE; call_irep->iseq = call_iseq; call_irep->ilen = 1; diff --git a/src/state.c b/src/state.c index d17181eb8..57f052569 100644 --- a/src/state.c +++ b/src/state.c @@ -63,10 +63,7 @@ mrb_close(mrb_state *mrb) mrb_free(mrb, mrb->stbase); mrb_free(mrb, mrb->cibase); for (i=0; iirep_len; i++) { - if (mrb->irep[i]->flags & MRB_IREP_NOFREE) continue; - if ((mrb->irep[i]->flags & MRB_ISEQ_NOFREE) == 0) { - mrb_free(mrb, mrb->irep[i]->iseq); - } + mrb_free(mrb, mrb->irep[i]->iseq); mrb_free(mrb, mrb->irep[i]->pool); mrb_free(mrb, mrb->irep[i]->syms); mrb_free(mrb, mrb->irep[i]); -- cgit v1.2.3