summaryrefslogtreecommitdiffhomepage
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
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
-rw-r--r--include/mruby.h1
-rw-r--r--src/state.c18
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);