summaryrefslogtreecommitdiffhomepage
path: root/src/state.c
diff options
context:
space:
mode:
authorYukihiro Matz Matsumoto <[email protected]>2013-03-06 15:22:46 +0900
committerYukihiro Matz Matsumoto <[email protected]>2013-03-06 15:22:46 +0900
commit2e95f638cd01a92a83f3808d745f69f46b64db10 (patch)
treece2bdd3a88dfbf481a77345bfff786f6d0746363 /src/state.c
parent9e8f254fb04177b1c24072a050816fb555e5d114 (diff)
downloadmruby-2e95f638cd01a92a83f3808d745f69f46b64db10.tar.gz
mruby-2e95f638cd01a92a83f3808d745f69f46b64db10.zip
Cut off mrb_irep_free from mrb_close; based on a patch from @matsumoto-r; close #951
Diffstat (limited to 'src/state.c')
-rw-r--r--src/state.c18
1 files changed, 12 insertions, 6 deletions
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);