diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-07-12 00:15:50 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-07-12 00:15:50 +0900 |
| commit | 8b29f10ba9ab4e66a6f79c5aca21d7dd1fb677ae (patch) | |
| tree | 96e10e5125f11adb3ba64e191b25a648d42baad5 | |
| parent | 3d792b97624dbb9ebbcf2024a3afa28d58f4f2d3 (diff) | |
| download | mruby-8b29f10ba9ab4e66a6f79c5aca21d7dd1fb677ae.tar.gz mruby-8b29f10ba9ab4e66a6f79c5aca21d7dd1fb677ae.zip | |
factor out context stack marking
| -rw-r--r-- | src/gc.c | 16 |
1 files changed, 13 insertions, 3 deletions
@@ -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++) { |
