diff options
| author | Daniel Bovensiepen <[email protected]> | 2012-12-07 16:19:52 +0800 |
|---|---|---|
| committer | Daniel Bovensiepen <[email protected]> | 2012-12-07 16:19:52 +0800 |
| commit | bef73cc54f044e16caf6bc1ba16ed0bf779c5ade (patch) | |
| tree | 3f4fe67c6180bf2df1b61e87b0da24cb3c6e9866 /src/state.c | |
| parent | bb6d42d987d2d03e20b7f0c8c8cd081a1082095b (diff) | |
| parent | f1ed1436240a2d0d3d45a7061ade26cdc25be352 (diff) | |
| download | mruby-bef73cc54f044e16caf6bc1ba16ed0bf779c5ade.tar.gz mruby-bef73cc54f044e16caf6bc1ba16ed0bf779c5ade.zip | |
Integrate refactoring of commit f1ed1436240a2d0d3d45a7061ade26cdc25be352
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 |
