From 2e95f638cd01a92a83f3808d745f69f46b64db10 Mon Sep 17 00:00:00 2001 From: Yukihiro Matz Matsumoto Date: Wed, 6 Mar 2013 15:22:46 +0900 Subject: Cut off mrb_irep_free from mrb_close; based on a patch from @matsumoto-r; close #951 --- include/mruby.h | 1 + src/state.c | 18 ++++++++++++------ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/include/mruby.h b/include/mruby.h index fe97dd055..ed746f409 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -207,6 +207,7 @@ mrb_value mrb_str_new2(mrb_state *mrb, const char *p); mrb_state* mrb_open(void); mrb_state* mrb_open_allocf(mrb_allocf, void *ud); +void mrb_irep_free(mrb_state*, struct mrb_irep*); void mrb_close(mrb_state*); int mrb_checkstack(mrb_state*,int); diff --git a/src/state.c b/src/state.c index 1936b8aab..b6805a4a4 100644 --- a/src/state.c +++ b/src/state.c @@ -82,6 +82,17 @@ mrb_open(void) void mrb_free_symtbl(mrb_state *mrb); void mrb_free_heap(mrb_state *mrb); +void +mrb_irep_free(mrb_state *mrb, struct mrb_irep *irep) +{ + if (!(irep->flags & MRB_ISEQ_NO_FREE)) + mrb_free(mrb, irep->iseq); + mrb_free(mrb, irep->pool); + mrb_free(mrb, irep->syms); + mrb_free(mrb, irep->lines); + mrb_free(mrb, irep); +} + void mrb_close(mrb_state *mrb) { @@ -94,12 +105,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_ISEQ_NO_FREE)) - 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]->lines); - mrb_free(mrb, mrb->irep[i]); + mrb_irep_free(mrb, mrb->irep[i]); } mrb_free(mrb, mrb->irep); mrb_free(mrb, mrb->rescue); -- cgit v1.2.3