diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2021-01-12 18:38:42 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2021-01-12 18:38:42 +0900 |
| commit | bec4d30dc6620c4102ce7acc08a4cb1c735a6ad5 (patch) | |
| tree | 9b7912d7b859c3cb2ee026a48582934c7af5cd2c /src/gc.c | |
| parent | e13f34e30866add2ec1829ec1819366844701c34 (diff) | |
| parent | 9877f4ca3c10e21b9d525256fe8cebc4ea404727 (diff) | |
| download | mruby-bec4d30dc6620c4102ce7acc08a4cb1c735a6ad5.tar.gz mruby-bec4d30dc6620c4102ce7acc08a4cb1c735a6ad5.zip | |
Merge branch 'reorganize-ci' of https://github.com/dearblue/mruby into dearblue-reorganize-ci
Diffstat (limited to 'src/gc.c')
| -rw-r--r-- | src/gc.c | 14 |
1 files changed, 8 insertions, 6 deletions
@@ -626,11 +626,14 @@ mark_context_stack(mrb_state *mrb, struct mrb_context *c) size_t e; mrb_value nil; - if (c->stack == NULL) return; - e = c->stack - c->stbase; + if (c->stbase == NULL) return; if (c->ci) { + e = (c->ci->stack ? c->ci->stack - c->stbase : 0); e += ci_nregs(c->ci); } + else { + e = 0; + } if (c->stbase + e > c->stend) e = c->stend - c->stbase; for (i=0; i<e; i++) { mrb_value v = c->stbase[i]; @@ -660,9 +663,8 @@ mark_context(mrb_state *mrb, struct mrb_context *c) /* mark call stack */ if (c->cibase) { for (ci = c->cibase; ci <= c->ci; ci++) { - mrb_gc_mark(mrb, (struct RBasic*)ci->env); mrb_gc_mark(mrb, (struct RBasic*)ci->proc); - mrb_gc_mark(mrb, (struct RBasic*)ci->target_class); + mrb_gc_mark(mrb, (struct RBasic*)ci->u.target_class); } } /* mark fibers */ @@ -840,7 +842,7 @@ obj_free(mrb_state *mrb, struct RBasic *obj, int end) mrb_callinfo *ce = c->cibase; while (ce <= ci) { - struct REnv *e = ci->env; + struct REnv *e = ci->u.env; if (e && !mrb_object_dead_p(mrb, (struct RBasic*)e) && e->tt == MRB_TT_ENV && MRB_ENV_ONSTACK_P(e)) { mrb_env_unshare(mrb, e); @@ -1002,7 +1004,7 @@ gc_gray_counts(mrb_state *mrb, mrb_gc *gc, struct RBasic *obj) if (!c || c->status == MRB_FIBER_TERMINATED) break; /* mark stack */ - i = c->stack - c->stbase; + i = c->ci->stack - c->stbase; if (c->ci) { i += ci_nregs(c->ci); |
