summaryrefslogtreecommitdiffhomepage
path: root/src/state.c
diff options
context:
space:
mode:
authorDaniel Bovensiepen <[email protected]>2012-12-07 16:19:52 +0800
committerDaniel Bovensiepen <[email protected]>2012-12-07 16:19:52 +0800
commitbef73cc54f044e16caf6bc1ba16ed0bf779c5ade (patch)
tree3f4fe67c6180bf2df1b61e87b0da24cb3c6e9866 /src/state.c
parentbb6d42d987d2d03e20b7f0c8c8cd081a1082095b (diff)
parentf1ed1436240a2d0d3d45a7061ade26cdc25be352 (diff)
downloadmruby-bef73cc54f044e16caf6bc1ba16ed0bf779c5ade.tar.gz
mruby-bef73cc54f044e16caf6bc1ba16ed0bf779c5ade.zip
Integrate refactoring of commit f1ed1436240a2d0d3d45a7061ade26cdc25be352
Diffstat (limited to 'src/state.c')
-rw-r--r--src/state.c19
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