summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2013-07-12 00:15:50 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2013-07-12 00:15:50 +0900
commit8b29f10ba9ab4e66a6f79c5aca21d7dd1fb677ae (patch)
tree96e10e5125f11adb3ba64e191b25a648d42baad5
parent3d792b97624dbb9ebbcf2024a3afa28d58f4f2d3 (diff)
downloadmruby-8b29f10ba9ab4e66a6f79c5aca21d7dd1fb677ae.tar.gz
mruby-8b29f10ba9ab4e66a6f79c5aca21d7dd1fb677ae.zip
factor out context stack marking
-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++) {