diff --git a/src/gc.c b/src/gc.c index d1d6ea1ee..bd7890087 100644 --- a/src/gc.c +++ b/src/gc.c @@ -407,6 +407,20 @@ add_gray_list(mrb_state *mrb, struct RBasic *obj) mrb->gray_list = obj; } +static void +mark_context_stack(mrb_state *mrb, struct mrb_context *c) +{ + size_t i; + size_t e; + + e = c->stack - c->stbase; + if (c->ci) e += c->ci->nregs; + if (c->stbase + e > c->stend) e = c->stend - c->stbase; + for (i=0; istbase[i]); + } +} + static void mark_context(mrb_state *mrb, struct mrb_context *c) { @@ -415,12 +429,8 @@ mark_context(mrb_state *mrb, struct mrb_context *c) mrb_callinfo *ci; /* mark stack */ - e = c->stack - c->stbase; - if (c->ci) e += c->ci->nregs; - if (c->stbase + e > c->stend) e = c->stend - c->stbase; - for (i=0; istbase[i]); - } + mark_context_stack(mrb, c); + /* mark ensure stack */ e = (c->ci) ? c->ci->eidx : 0; for (i=0; i