From f4867743524c37c14acdfb93caa874818cc6c101 Mon Sep 17 00:00:00 2001 From: Yukihiro Matz Matsumoto Date: Fri, 7 Dec 2012 15:57:40 +0900 Subject: refactor and move irep malloc away to mrb_add_irep() --- src/state.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) (limited to 'src/state.c') diff --git a/src/state.c b/src/state.c index 106ab2aa3..c1ad4c6ad 100644 --- a/src/state.c +++ b/src/state.c @@ -109,20 +109,23 @@ mrb_close(mrb_state *mrb) mrb_free(mrb, mrb); } -void -mrb_add_irep(mrb_state *mrb, int idx) +mrb_irep* +mrb_add_irep(mrb_state *mrb) { + static const mrb_irep mrb_irep_zero = { 0 }; + mrb_irep *irep; + if (!mrb->irep) { int max = 256; - if (idx > max) max = idx+1; + if (mrb->irep_len > max) max = mrb->irep_len+1; mrb->irep = (mrb_irep **)mrb_calloc(mrb, max, sizeof(mrb_irep*)); mrb->irep_capa = max; } - else if (mrb->irep_capa <= idx) { + else if (mrb->irep_capa <= mrb->irep_len) { int i; size_t old_capa = mrb->irep_capa; - while (mrb->irep_capa <= idx) { + while (mrb->irep_capa <= mrb->irep_len) { mrb->irep_capa *= 2; } mrb->irep = (mrb_irep **)mrb_realloc(mrb, mrb->irep, sizeof(mrb_irep*)*mrb->irep_capa); @@ -130,6 +133,12 @@ mrb_add_irep(mrb_state *mrb, int idx) mrb->irep[i] = NULL; } } + irep = (mrb_irep *)mrb_malloc(mrb, sizeof(mrb_irep)); + *irep = mrb_irep_zero; + mrb->irep[mrb->irep_len] = irep; + irep->idx = mrb->irep_len++; + + return irep; } mrb_value -- cgit v1.2.3