diff options
| -rw-r--r-- | include/mruby.h | 1 | ||||
| -rw-r--r-- | 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 @@ -83,6 +83,17 @@ 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) { size_t i; @@ -94,12 +105,7 @@ mrb_close(mrb_state *mrb) mrb_free(mrb, mrb->stbase); mrb_free(mrb, mrb->cibase); for (i=0; i<mrb->irep_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); |
