summaryrefslogtreecommitdiffhomepage
path: root/src/gc.c
diff options
context:
space:
mode:
authorPaolo Bosetti <[email protected]>2012-05-29 14:32:05 -0700
committerPaolo Bosetti <[email protected]>2012-05-29 14:32:05 -0700
commitd73517877847dab5b345c7fa98091647737bbfe0 (patch)
tree6090a2df49b8093606181e5416e6aa6a5040b0ec /src/gc.c
parent391f8dcef02cdafeb4e0acc693945acb166a8d09 (diff)
parent1e5d15dbcb977f6d197c24eca4a973ee1c5bf521 (diff)
downloadmruby-d73517877847dab5b345c7fa98091647737bbfe0.tar.gz
mruby-d73517877847dab5b345c7fa98091647737bbfe0.zip
Merge branch 'master' of git://github.com/mruby/mruby into XCode
Diffstat (limited to 'src/gc.c')
-rw-r--r--src/gc.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/gc.c b/src/gc.c
index 1d7a8627f..0ba6e3e76 100644
--- a/src/gc.c
+++ b/src/gc.c
@@ -261,12 +261,13 @@ mrb_obj_alloc(mrb_state *mrb, enum mrb_vtype ttype, struct RClass *cls)
}
mrb->live++;
- mrb->arena[mrb->arena_idx++] = p;
- memset(p, 0, sizeof(RVALUE));
- if (mrb->arena_idx >= MRB_ARENA_SIZE) {
+ if (mrb->arena_idx > MRB_ARENA_SIZE) {
/* arena overflow error */
- mrb_raise(mrb, E_TYPE_ERROR, "arena overflow error");
+ mrb->arena_idx = MRB_ARENA_SIZE - 2; /* force room in arena */
+ mrb_raise(mrb, mrb->eRuntimeError_class, "arena overflow error");
}
+ mrb->arena[mrb->arena_idx++] = p;
+ memset(p, 0, sizeof(RVALUE));
p->tt = ttype;
p->c = cls;
paint_partial_white(mrb, p);