Cut off mrb_irep_free from mrb_close; based on a patch from @matsumoto-r; close #951

This commit is contained in:
Yukihiro Matz Matsumoto
2013-03-06 15:22:46 +09:00
parent 9e8f254fb0
commit 2e95f638cd
2 changed files with 13 additions and 6 deletions
+1
View File
@@ -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);
+12 -6
View File
@@ -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; 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);