diff --git a/src/gc.c b/src/gc.c index e31ec2f33..e892a6749 100644 --- a/src/gc.c +++ b/src/gc.c @@ -215,6 +215,7 @@ mrb_realloc(mrb_state *mrb, void *p, size_t len) p2 = mrb_realloc_simple(mrb, p, len); if (!p2 && len) { if (mrb->gc.out_of_memory) { + mrb_exc_raise(mrb, mrb_obj_value(mrb->nomem_err)); /* mrb_panic(mrb); */ } else { diff --git a/src/vm.c b/src/vm.c index bcea8a056..e65b0336c 100644 --- a/src/vm.c +++ b/src/vm.c @@ -256,12 +256,13 @@ static void cipop(mrb_state *mrb) { struct mrb_context *c = mrb->c; - - if (c->ci->env) { - mrb_env_unshare(mrb, c->ci->env); - } + struct REnv *env = c->ci->env; c->ci--; + + if (env) { + mrb_env_unshare(mrb, env); + } } void mrb_exc_set(mrb_state *mrb, mrb_value exc);