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:
Yukihiro "Matz" Matsumoto
2023-01-10 18:22:43 +09:00
committed by GitHub
3 changed files with 7 additions and 1 deletions
+1
View File
@@ -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
+1
View File
@@ -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
+5 -1
View File
@@ -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);