summaryrefslogtreecommitdiffhomepage
path: root/mrbgems
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
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')
-rw-r--r--mrbgems/mruby-bin-mirb/tools/mirb/mirb.c2
-rw-r--r--mrbgems/mruby-eval/src/eval.c4
-rw-r--r--mrbgems/mruby-fiber/src/fiber.c9
3 files changed, 7 insertions, 8 deletions
diff --git a/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c b/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c
index 12adfc4a6..c31c22bc9 100644
--- a/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c
+++ b/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c
@@ -683,7 +683,7 @@ main(int argc, char **argv)
}
p(mrb, result, 1);
#ifndef MRB_NO_MIRB_UNDERSCORE
- *(mrb->c->stack + 1) = result;
+ *(mrb->c->ci->stack + 1) = result;
#endif
}
}
diff --git a/mrbgems/mruby-eval/src/eval.c b/mrbgems/mruby-eval/src/eval.c
index 26bc039e1..368c7892b 100644
--- a/mrbgems/mruby-eval/src/eval.c
+++ b/mrbgems/mruby-eval/src/eval.c
@@ -83,7 +83,7 @@ create_proc_from_string(mrb_state *mrb, const char *s, mrb_int len, mrb_value bi
/* do nothing, because e is assigned already */
}
else {
- e = mrb_env_new(mrb, mrb->c, ci, ci->proc->body.irep->nlocals, ci[1].stackent, target_class);
+ e = mrb_env_new(mrb, mrb->c, ci, ci->proc->body.irep->nlocals, ci->stack, target_class);
ci->u.env = e;
}
proc->e.env = e;
@@ -115,7 +115,7 @@ exec_irep(mrb_state *mrb, mrb_value self, struct RProc *proc)
return ret;
}
/* clear block */
- mrb->c->stack[1] = mrb_nil_value();
+ mrb->c->ci->stack[1] = mrb_nil_value();
return mrb_exec_irep(mrb, self, proc);
}
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);