diff options
| author | Yukihiro Matz Matsumoto <[email protected]> | 2012-12-07 15:57:40 +0900 |
|---|---|---|
| committer | Yukihiro Matz Matsumoto <[email protected]> | 2012-12-07 15:57:40 +0900 |
| commit | f4867743524c37c14acdfb93caa874818cc6c101 (patch) | |
| tree | df49cf6267d121200ba10ff08a3c64062c60547a /src/state.c | |
| parent | 40daee12cfbf6dac4421f47c9c953788985fe238 (diff) | |
| download | mruby-f4867743524c37c14acdfb93caa874818cc6c101.tar.gz mruby-f4867743524c37c14acdfb93caa874818cc6c101.zip | |
refactor and move irep malloc away to mrb_add_irep()
Diffstat (limited to 'src/state.c')
| -rw-r--r-- | src/state.c | 19 |
1 files changed, 14 insertions, 5 deletions
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 |
