summaryrefslogtreecommitdiffhomepage
path: root/mrbgems
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2021-09-10 12:39:51 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2021-09-10 12:39:51 +0900
commit7df31d945181d86ac9d97ed5db4a14833ee93495 (patch)
treebbd08e32fb39fbad628b377c417cfda5fbfd2e79 /mrbgems
parent3050630b69f7ec8aeaa5a1918275fa56e15b80f7 (diff)
downloadmruby-7df31d945181d86ac9d97ed5db4a14833ee93495.tar.gz
mruby-7df31d945181d86ac9d97ed5db4a14833ee93495.zip
mruby.h: remove `acc` from `callinfo`; add `cci` instead.
`acc` was used as an index of the receiver (if positive), or a flag for methods implemented in C. We replace `regs[ci->acc]` by `ci[1].stack[0]`. And renamed `acc` (originally meant accumulator position) to `cci` (means callinfo for C implemented method).
Diffstat (limited to 'mrbgems')
-rw-r--r--mrbgems/mruby-class-ext/src/class.c2
-rw-r--r--mrbgems/mruby-fiber/src/fiber.c11
-rw-r--r--mrbgems/mruby-object-ext/src/object.c2
3 files changed, 8 insertions, 7 deletions
diff --git a/mrbgems/mruby-class-ext/src/class.c b/mrbgems/mruby-class-ext/src/class.c
index 39c16fc48..290ddf4b3 100644
--- a/mrbgems/mruby-class-ext/src/class.c
+++ b/mrbgems/mruby-class-ext/src/class.c
@@ -49,7 +49,7 @@ mrb_mod_module_exec(mrb_state *mrb, mrb_value self)
mrb_get_args(mrb, "*&!", &argv, &argc, &blk);
c = mrb_class_ptr(self);
- if (mrb->c->ci->acc < 0) {
+ if (mrb->c->ci->cci > 0) {
return mrb_yield_with_class(mrb, blk, argc, argv, self, c);
}
mrb_vm_ci_target_class_set(mrb->c->ci, c);
diff --git a/mrbgems/mruby-fiber/src/fiber.c b/mrbgems/mruby-fiber/src/fiber.c
index 3e6a620be..fe468528c 100644
--- a/mrbgems/mruby-fiber/src/fiber.c
+++ b/mrbgems/mruby-fiber/src/fiber.c
@@ -7,7 +7,8 @@
#define FIBER_STACK_INIT_SIZE 64
#define FIBER_CI_INIT_SIZE 8
-#define CI_ACC_RESUMED -3
+/* copied from vm.c */
+#define CINFO_RESUMED 3
/*
* call-seq:
@@ -160,7 +161,7 @@ fiber_check_cfunc(mrb_state *mrb, struct mrb_context *c)
mrb_callinfo *ci;
for (ci = c->ci; ci >= c->cibase; ci--) {
- if (ci->acc < 0) {
+ if (ci->cci > 0) {
mrb_raise(mrb, E_FIBER_ERROR, "can't cross C function boundary");
}
}
@@ -226,7 +227,7 @@ fiber_switch(mrb_state *mrb, mrb_value self, mrb_int len, const mrb_value *a, mr
else {
value = fiber_result(mrb, a, len);
if (vmexec) {
- c->ci->stack[c->ci[1].acc] = value;
+ c->ci[1].stack[0] = value;
}
}
@@ -264,7 +265,7 @@ fiber_resume(mrb_state *mrb, mrb_value self)
mrb_bool vmexec = FALSE;
mrb_get_args(mrb, "*!", &a, &len);
- if (mrb->c->ci->acc < 0) {
+ if (mrb->c->ci->cci > 0) {
vmexec = TRUE;
}
return fiber_switch(mrb, self, len, a, TRUE, vmexec);
@@ -357,7 +358,7 @@ mrb_fiber_yield(mrb_state *mrb, mrb_int len, const mrb_value *a)
c->prev = NULL;
if (c->vmexec) {
c->vmexec = FALSE;
- mrb->c->ci->acc = CI_ACC_RESUMED;
+ mrb->c->ci->cci = CINFO_RESUMED;
c->ci--; /* pop callinfo for yield */
}
MARK_CONTEXT_MODIFY(mrb->c);
diff --git a/mrbgems/mruby-object-ext/src/object.c b/mrbgems/mruby-object-ext/src/object.c
index a65feea6d..69f1763ce 100644
--- a/mrbgems/mruby-object-ext/src/object.c
+++ b/mrbgems/mruby-object-ext/src/object.c
@@ -103,7 +103,7 @@ mrb_obj_instance_exec(mrb_state *mrb, mrb_value self)
mrb_get_args(mrb, "*&!", &argv, &argc, &blk);
c = mrb_singleton_class_ptr(mrb, self);
- if (mrb->c->ci->acc < 0) {
+ if (mrb->c->ci->cci > 0) {
return mrb_yield_with_class(mrb, blk, argc, argv, self, c);
}
mrb_vm_ci_target_class_set(mrb->c->ci, c);