diff options
| author | dearblue <[email protected]> | 2021-01-10 10:36:03 +0900 |
|---|---|---|
| committer | dearblue <[email protected]> | 2021-01-10 13:23:35 +0900 |
| commit | 16baea06771f38fea810ad1eaf3239086442c258 (patch) | |
| tree | b186bc1a7f3468edcf645dd36282434c8f171fd2 /mrbgems/mruby-fiber/src | |
| parent | 58e94427377952b0953bcdf2d544c62b0fefd4a6 (diff) | |
| download | mruby-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.c | 9 |
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); |
