summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/gc.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/gc.c b/src/gc.c
index d1d6ea1ee..bd7890087 100644
--- a/src/gc.c
+++ b/src/gc.c
@@ -408,19 +408,29 @@ add_gray_list(mrb_state *mrb, struct RBasic *obj)
}
static void
-mark_context(mrb_state *mrb, struct mrb_context *c)
+mark_context_stack(mrb_state *mrb, struct mrb_context *c)
{
size_t i;
size_t e;
- 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]);
}
+}
+
+static void
+mark_context(mrb_state *mrb, struct mrb_context *c)
+{
+ size_t i;
+ size_t e;
+ mrb_callinfo *ci;
+
+ /* mark stack */
+ mark_context_stack(mrb, c);
+
/* mark ensure stack */
e = (c->ci) ? c->ci->eidx : 0;
for (i=0; i<e; i++) {