summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-fiber/src
diff options
context:
space:
mode:
authordearblue <[email protected]>2021-01-10 10:36:03 +0900
committerdearblue <[email protected]>2021-01-10 13:23:35 +0900
commit16baea06771f38fea810ad1eaf3239086442c258 (patch)
treeb186bc1a7f3468edcf645dd36282434c8f171fd2 /mrbgems/mruby-fiber/src
parent58e94427377952b0953bcdf2d544c62b0fefd4a6 (diff)
downloadmruby-16baea06771f38fea810ad1eaf3239086442c258.tar.gz
mruby-16baea06771f38fea810ad1eaf3239086442c258.zip
Changes `stackent` to `stack` of `mrb_callinfo`
This enhances self-containment. Previously `mrb_context::stack` had the current call level stack, but now it owns it. The `mrb_context::stack` field, which is no longer needed, will be removed.
Diffstat (limited to 'mrbgems/mruby-fiber/src')
-rw-r--r--mrbgems/mruby-fiber/src/fiber.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/mrbgems/mruby-fiber/src/fiber.c b/mrbgems/mruby-fiber/src/fiber.c
index 328f43fd9..d75f864c1 100644
--- a/mrbgems/mruby-fiber/src/fiber.c
+++ b/mrbgems/mruby-fiber/src/fiber.c
@@ -93,7 +93,6 @@ fiber_init(mrb_state *mrb, mrb_value self)
}
c->stbase = (mrb_value *)mrb_malloc(mrb, slen*sizeof(mrb_value));
c->stend = c->stbase + slen;
- c->stack = c->stbase;
#ifdef MRB_NAN_BOXING
{
@@ -110,13 +109,12 @@ fiber_init(mrb_state *mrb, mrb_value self)
#endif
/* copy receiver from a block */
- c->stack[0] = mrb->c->stack[0];
+ c->stbase[0] = mrb->c->ci->stack[0];
/* initialize callinfo stack */
c->cibase = (mrb_callinfo *)mrb_calloc(mrb, FIBER_CI_INIT_SIZE, sizeof(mrb_callinfo));
c->ciend = c->cibase + FIBER_CI_INIT_SIZE;
c->ci = c->cibase;
- c->ci->stackent = c->stack;
/* adjust return callinfo */
ci = c->ci;
@@ -124,6 +122,7 @@ fiber_init(mrb_state *mrb, mrb_value self)
ci->proc = p;
mrb_field_write_barrier(mrb, (struct RBasic*)mrb_obj_ptr(self), (struct RBasic*)p);
ci->pc = p->body.irep->iseq;
+ ci->stack = c->stbase;
ci[1] = ci[0];
c->ci++; /* push dummy callinfo */
@@ -214,7 +213,7 @@ fiber_switch(mrb_state *mrb, mrb_value self, mrb_int len, const mrb_value *a, mr
mrb_raise(mrb, E_FIBER_ERROR, "double resume (current)");
}
mrb_stack_extend(mrb, len+2); /* for receiver and (optional) block */
- b = c->stack+1;
+ b = c->stbase+1;
e = b + len;
while (b<e) {
*b++ = *a++;
@@ -223,7 +222,7 @@ fiber_switch(mrb_state *mrb, mrb_value self, mrb_int len, const mrb_value *a, mr
c->ci--; /* pop dummy callinfo */
}
c->cibase->argc = (int)len;
- value = c->stack[0] = MRB_PROC_ENV(c->cibase->proc)->stack[0];
+ value = c->stbase[0] = MRB_PROC_ENV(c->cibase->proc)->stack[0];
}
else {
value = fiber_result(mrb, a, len);