summaryrefslogtreecommitdiffhomepage
path: root/mrbgems
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2021-01-12 18:38:42 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2021-01-12 18:38:42 +0900
commitbec4d30dc6620c4102ce7acc08a4cb1c735a6ad5 (patch)
tree9b7912d7b859c3cb2ee026a48582934c7af5cd2c /mrbgems
parente13f34e30866add2ec1829ec1819366844701c34 (diff)
parent9877f4ca3c10e21b9d525256fe8cebc4ea404727 (diff)
downloadmruby-bec4d30dc6620c4102ce7acc08a4cb1c735a6ad5.tar.gz
mruby-bec4d30dc6620c4102ce7acc08a4cb1c735a6ad5.zip
Merge branch 'reorganize-ci' of https://github.com/dearblue/mruby into dearblue-reorganize-ci
Diffstat (limited to 'mrbgems')
-rw-r--r--mrbgems/mruby-bin-mirb/tools/mirb/mirb.c10
-rw-r--r--mrbgems/mruby-bin-mruby/tools/mruby/mruby.c4
-rw-r--r--mrbgems/mruby-class-ext/src/class.c3
-rw-r--r--mrbgems/mruby-compiler/core/parse.y2
-rw-r--r--mrbgems/mruby-compiler/core/y.tab.c2
-rw-r--r--mrbgems/mruby-eval/src/eval.c14
-rw-r--r--mrbgems/mruby-fiber/src/fiber.c19
-rw-r--r--mrbgems/mruby-object-ext/src/object.c2
8 files changed, 27 insertions, 29 deletions
diff --git a/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c b/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c
index b626024d1..c31c22bc9 100644
--- a/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c
+++ b/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c
@@ -516,8 +516,8 @@ main(int argc, char **argv)
}
mrb_load_file_cxt(mrb, lfp, cxt);
fclose(lfp);
- e = mrb->c->cibase->env;
- mrb->c->cibase->env = NULL;
+ e = mrb_vm_ci_env(mrb->c->cibase);
+ mrb_vm_ci_env_set(mrb->c->cibase, NULL);
mrb_env_unshare(mrb, e);
mrbc_cleanup_local_variables(mrb, cxt);
}
@@ -658,8 +658,8 @@ main(int argc, char **argv)
mrb_codedump_all(mrb, proc);
}
/* adjust stack length of toplevel environment */
- if (mrb->c->cibase->env) {
- struct REnv *e = mrb->c->cibase->env;
+ if (mrb->c->cibase->u.env) {
+ struct REnv *e = mrb_vm_ci_env(mrb->c->cibase);
if (e && MRB_ENV_LEN(e) < proc->body.irep->nlocals) {
MRB_ENV_SET_LEN(e, proc->body.irep->nlocals);
}
@@ -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-bin-mruby/tools/mruby/mruby.c b/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c
index dfac48217..5c49b6d94 100644
--- a/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c
+++ b/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c
@@ -333,8 +333,8 @@ main(int argc, char **argv)
v = mrb_load_detect_file_cxt(mrb, lfp, c);
}
fclose(lfp);
- e = mrb->c->cibase->env;
- mrb->c->cibase->env = NULL;
+ e = mrb_vm_ci_env(mrb->c->cibase);
+ mrb_vm_ci_env_set(mrb->c->cibase, NULL);
mrb_env_unshare(mrb, e);
mrbc_cleanup_local_variables(mrb, c);
}
diff --git a/mrbgems/mruby-class-ext/src/class.c b/mrbgems/mruby-class-ext/src/class.c
index b7b5e18f8..39c16fc48 100644
--- a/mrbgems/mruby-class-ext/src/class.c
+++ b/mrbgems/mruby-class-ext/src/class.c
@@ -1,6 +1,7 @@
#include "mruby.h"
#include "mruby/class.h"
#include "mruby/string.h"
+#include "mruby/proc.h"
static mrb_value
mrb_mod_name(mrb_state *mrb, mrb_value self)
@@ -51,7 +52,7 @@ mrb_mod_module_exec(mrb_state *mrb, mrb_value self)
if (mrb->c->ci->acc < 0) {
return mrb_yield_with_class(mrb, blk, argc, argv, self, c);
}
- mrb->c->ci->target_class = c;
+ mrb_vm_ci_target_class_set(mrb->c->ci, c);
return mrb_yield_cont(mrb, blk, self, argc, argv);
}
diff --git a/mrbgems/mruby-compiler/core/parse.y b/mrbgems/mruby-compiler/core/parse.y
index c5d40375c..5b58c902e 100644
--- a/mrbgems/mruby-compiler/core/parse.y
+++ b/mrbgems/mruby-compiler/core/parse.y
@@ -6783,7 +6783,7 @@ mrb_load_exec(mrb_state *mrb, struct mrb_parser_state *p, mrbc_context *c)
}
MRB_PROC_SET_TARGET_CLASS(proc, target);
if (mrb->c->ci) {
- mrb->c->ci->target_class = target;
+ mrb_vm_ci_target_class_set(mrb->c->ci, target);
}
v = mrb_top_run(mrb, proc, mrb_top_self(mrb), keep);
if (mrb->exc) return mrb_nil_value();
diff --git a/mrbgems/mruby-compiler/core/y.tab.c b/mrbgems/mruby-compiler/core/y.tab.c
index 64a68d03f..c389c19e2 100644
--- a/mrbgems/mruby-compiler/core/y.tab.c
+++ b/mrbgems/mruby-compiler/core/y.tab.c
@@ -12784,7 +12784,7 @@ mrb_load_exec(mrb_state *mrb, struct mrb_parser_state *p, mrbc_context *c)
}
MRB_PROC_SET_TARGET_CLASS(proc, target);
if (mrb->c->ci) {
- mrb->c->ci->target_class = target;
+ mrb_vm_ci_target_class_set(mrb->c->ci, target);
}
v = mrb_top_run(mrb, proc, mrb_top_self(mrb), keep);
if (mrb->exc) return mrb_nil_value();
diff --git a/mrbgems/mruby-eval/src/eval.c b/mrbgems/mruby-eval/src/eval.c
index c7a511fe4..368c7892b 100644
--- a/mrbgems/mruby-eval/src/eval.c
+++ b/mrbgems/mruby-eval/src/eval.c
@@ -79,19 +79,19 @@ create_proc_from_string(mrb_state *mrb, const char *s, mrb_int len, mrb_value bi
target_class = MRB_PROC_TARGET_CLASS(ci->proc);
}
if (ci->proc && !MRB_PROC_CFUNC_P(ci->proc)) {
- if (ci->env) {
- e = ci->env;
+ if ((e = mrb_vm_ci_env(ci)) != NULL) {
+ /* 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);
- ci->env = e;
+ 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;
proc->flags |= MRB_PROC_ENVSET;
mrb_field_write_barrier(mrb, (struct RBasic*)proc, (struct RBasic*)e);
}
proc->upper = ci->proc;
- mrb->c->ci->target_class = target_class;
+ mrb_vm_ci_target_class_set(mrb->c->ci, target_class);
/* mrb_codedump_all(mrb, proc); */
mrb_parser_free(p);
@@ -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);
}
@@ -157,7 +157,7 @@ f_instance_eval(mrb_state *mrb, mrb_value self)
proc = create_proc_from_string(mrb, s, len, mrb_nil_value(), file, line);
MRB_PROC_SET_TARGET_CLASS(proc, mrb_class_ptr(cv));
mrb_assert(!MRB_PROC_CFUNC_P(proc));
- mrb->c->ci->target_class = mrb_class_ptr(cv);
+ mrb_vm_ci_target_class_set(mrb->c->ci, mrb_class_ptr(cv));
return exec_irep(mrb, self, proc);
}
else {
diff --git a/mrbgems/mruby-fiber/src/fiber.c b/mrbgems/mruby-fiber/src/fiber.c
index 006aed50f..44125598e 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,20 +109,19 @@ 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;
- ci->target_class = MRB_PROC_TARGET_CLASS(p);
- ci->proc = p;
+ mrb_vm_ci_target_class_set(ci, MRB_PROC_TARGET_CLASS(p));
+ mrb_vm_ci_proc_set(ci, 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 */
@@ -154,7 +152,7 @@ fiber_result(mrb_state *mrb, const mrb_value *a, mrb_int len)
}
/* mark return from context modifying method */
-#define MARK_CONTEXT_MODIFY(c) (c)->ci->target_class = NULL
+#define MARK_CONTEXT_MODIFY(c) (c)->ci->u.target_class = NULL
static void
fiber_check_cfunc(mrb_state *mrb, struct mrb_context *c)
@@ -214,7 +212,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 +221,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);
@@ -231,7 +229,7 @@ fiber_switch(mrb_state *mrb, mrb_value self, mrb_int len, const mrb_value *a, mr
if (vmexec) {
c->vmexec = TRUE;
- value = mrb_vm_exec(mrb, c->ci->proc, c->cibase->pc);
+ value = mrb_vm_exec(mrb, c->ci->proc, c->ci->pc);
mrb->c = old_c;
}
else {
@@ -357,7 +355,6 @@ mrb_fiber_yield(mrb_state *mrb, mrb_int len, const mrb_value *a)
if (c->vmexec) {
c->vmexec = FALSE;
mrb->c->ci->acc = CI_ACC_RESUMED;
- c->cibase->pc = c->ci->pc;
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 2d99ce8c2..b636c9823 100644
--- a/mrbgems/mruby-object-ext/src/object.c
+++ b/mrbgems/mruby-object-ext/src/object.c
@@ -105,7 +105,7 @@ mrb_obj_instance_exec(mrb_state *mrb, mrb_value self)
if (mrb->c->ci->acc < 0) {
return mrb_yield_with_class(mrb, blk, argc, argv, self, c);
}
- mrb->c->ci->target_class = c;
+ mrb_vm_ci_target_class_set(mrb->c->ci, c);
return mrb_yield_cont(mrb, blk, self, argc, argv);
}