diff options
| author | dearblue <[email protected]> | 2021-01-10 10:20:01 +0900 |
|---|---|---|
| committer | dearblue <[email protected]> | 2021-01-10 13:23:28 +0900 |
| commit | 58e94427377952b0953bcdf2d544c62b0fefd4a6 (patch) | |
| tree | ca0092df0d3e983166b0753a463663b583a6d414 /src/proc.c | |
| parent | b210cfa34ea9e0d288d35b3c9b78c98d33f25dae (diff) | |
| download | mruby-58e94427377952b0953bcdf2d544c62b0fefd4a6.tar.gz mruby-58e94427377952b0953bcdf2d544c62b0fefd4a6.zip | |
Unified `target_class` and `env` of `mrb_callinfo`
If there is `env`, `env->c` means `target_class`.
Diffstat (limited to 'src/proc.c')
| -rw-r--r-- | src/proc.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/proc.c b/src/proc.c index d58d9d0df..66a8e5d64 100644 --- a/src/proc.c +++ b/src/proc.c @@ -46,7 +46,7 @@ mrb_proc_new(mrb_state *mrb, const mrb_irep *irep) tc = MRB_PROC_TARGET_CLASS(ci->proc); } if (tc == NULL) { - tc = ci->target_class; + tc = mrb_vm_ci_target_class(ci); } p->upper = ci->proc; p->e.target_class = tc; @@ -83,14 +83,14 @@ closure_setup(mrb_state *mrb, struct RProc *p) const struct RProc *up = p->upper; struct REnv *e = NULL; - if (ci && ci->env) { - e = ci->env; + if (ci && (e = mrb_vm_ci_env(ci)) != NULL) { + /* do nothing, because e is assigned already */ } else if (up) { struct RClass *tc = MRB_PROC_TARGET_CLASS(p); e = mrb_env_new(mrb, mrb->c, ci, up->body.irep->nlocals, mrb->c->stack, tc); - ci->env = e; + ci->u.env = e; if (MRB_PROC_ENV_P(up) && MRB_PROC_ENV(up)->cxt == NULL) { e->mid = MRB_PROC_ENV(up)->mid; } @@ -211,7 +211,7 @@ mrb_proc_s_new(mrb_state *mrb, mrb_value proc_class) proc = mrb_obj_value(p); mrb_funcall_with_block(mrb, proc, MRB_SYM(initialize), 0, NULL, proc); if (!MRB_PROC_STRICT_P(p) && - mrb->c->ci > mrb->c->cibase && MRB_PROC_ENV(p) == mrb->c->ci[-1].env) { + mrb->c->ci > mrb->c->cibase && MRB_PROC_ENV(p) == mrb->c->ci[-1].u.env) { p->flags |= MRB_PROC_ORPHAN; } return proc; |
