From 8b29f10ba9ab4e66a6f79c5aca21d7dd1fb677ae Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Fri, 12 Jul 2013 00:15:50 +0900 Subject: [PATCH] factor out context stack marking --- src/gc.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) 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