mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Merge pull request #5904 from dearblue/env-unshare-on-top-run
Call `mrb_env_unshare()` in `mrb_top_run()` if necessary
This commit is contained in:
@@ -6764,6 +6764,7 @@ mrbc_cleanup_local_variables(mrb_state *mrb, mrbc_context *c)
|
||||
c->syms = NULL;
|
||||
c->slen = 0;
|
||||
}
|
||||
c->keep_lv = FALSE;
|
||||
}
|
||||
|
||||
MRB_API void
|
||||
|
||||
@@ -12964,6 +12964,7 @@ mrbc_cleanup_local_variables(mrb_state *mrb, mrbc_context *c)
|
||||
c->syms = NULL;
|
||||
c->slen = 0;
|
||||
}
|
||||
c->keep_lv = FALSE;
|
||||
}
|
||||
|
||||
MRB_API void
|
||||
|
||||
@@ -3097,7 +3097,11 @@ mrb_top_run(mrb_state *mrb, const struct RProc *proc, mrb_value self, mrb_int st
|
||||
return mrb_vm_run(mrb, proc, self, stack_keep);
|
||||
}
|
||||
if (mrb->c->ci == mrb->c->cibase) {
|
||||
mrb_vm_ci_env_set(mrb->c->ci, NULL);
|
||||
if (stack_keep == 0) {
|
||||
struct REnv *e = mrb_vm_ci_env(mrb->c->ci);
|
||||
mrb_vm_ci_env_set(mrb->c->ci, NULL);
|
||||
mrb_env_unshare(mrb, e, FALSE);
|
||||
}
|
||||
return mrb_vm_run(mrb, proc, self, stack_keep);
|
||||
}
|
||||
cipush(mrb, 0, CINFO_SKIP, mrb->object_class, NULL, NULL, 0, 0);
|
||||
|
||||
Reference in New Issue
Block a user