factor out context stack marking

This commit is contained in:
Yukihiro "Matz" Matsumoto
2013-07-12 00:15:50 +09:00
parent 3d792b9762
commit 8b29f10ba9
+16 -6
View File
@@ -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; i<e; i++) {
mrb_gc_mark_value(mrb, c->stbase[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; i<e; i++) {
mrb_gc_mark_value(mrb, c->stbase[i]);
}
mark_context_stack(mrb, c);
/* mark ensure stack */
e = (c->ci) ? c->ci->eidx : 0;
for (i=0; i<e; i++) {