summaryrefslogtreecommitdiffhomepage
path: root/src/gc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gc.c')
-rw-r--r--src/gc.c26
1 files changed, 3 insertions, 23 deletions
diff --git a/src/gc.c b/src/gc.c
index 2a7d7f6e1..8e8941cd7 100644
--- a/src/gc.c
+++ b/src/gc.c
@@ -599,27 +599,7 @@ add_gray_list(mrb_state *mrb, mrb_gc *gc, struct RBasic *obj)
gc->gray_list = obj;
}
-static mrb_int
-ci_nregs(mrb_callinfo *ci)
-{
- const struct RProc *p = ci->proc;
- mrb_int n = 0;
-
- if (!p) {
- if (ci->argc < 0) return 3;
- return ci->argc+2;
- }
- if (!MRB_PROC_CFUNC_P(p) && p->body.irep) {
- n = p->body.irep->nregs;
- }
- if (ci->argc < 0) {
- if (n < 3) n = 3; /* self + args + blk */
- }
- if (ci->argc > n) {
- n = ci->argc + 2; /* self + blk */
- }
- return n;
-}
+mrb_int mrb_ci_nregs(mrb_callinfo *ci);
static void
mark_context_stack(mrb_state *mrb, struct mrb_context *c)
@@ -631,7 +611,7 @@ mark_context_stack(mrb_state *mrb, struct mrb_context *c)
if (c->stbase == NULL) return;
if (c->ci) {
e = (c->ci->stack ? c->ci->stack - c->stbase : 0);
- e += ci_nregs(c->ci);
+ e += mrb_ci_nregs(c->ci);
}
else {
e = 0;
@@ -1029,7 +1009,7 @@ gc_gray_counts(mrb_state *mrb, mrb_gc *gc, struct RBasic *obj)
i = c->ci->stack - c->stbase;
if (c->ci) {
- i += ci_nregs(c->ci);
+ i += mrb_ci_nregs(c->ci);
}
if (c->stbase + i > c->stend) i = c->stend - c->stbase;
children += i;