diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2021-01-12 18:38:42 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2021-01-12 18:38:42 +0900 |
| commit | bec4d30dc6620c4102ce7acc08a4cb1c735a6ad5 (patch) | |
| tree | 9b7912d7b859c3cb2ee026a48582934c7af5cd2c /mrbgems | |
| parent | e13f34e30866add2ec1829ec1819366844701c34 (diff) | |
| parent | 9877f4ca3c10e21b9d525256fe8cebc4ea404727 (diff) | |
| download | mruby-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.c | 10 | ||||
| -rw-r--r-- | mrbgems/mruby-bin-mruby/tools/mruby/mruby.c | 4 | ||||
| -rw-r--r-- | mrbgems/mruby-class-ext/src/class.c | 3 | ||||
| -rw-r--r-- | mrbgems/mruby-compiler/core/parse.y | 2 | ||||
| -rw-r--r-- | mrbgems/mruby-compiler/core/y.tab.c | 2 | ||||
| -rw-r--r-- | mrbgems/mruby-eval/src/eval.c | 14 | ||||
| -rw-r--r-- | mrbgems/mruby-fiber/src/fiber.c | 19 | ||||
| -rw-r--r-- | mrbgems/mruby-object-ext/src/object.c | 2 |
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); } |
