From 26e436e24797f0c3228bc9900615afe7d2e29ddf Mon Sep 17 00:00:00 2001 From: Takeshi Watanabe Date: Wed, 4 Apr 2018 15:14:46 +0900 Subject: Adjust environment when `mrb_exec_irep` happened. --- src/vm.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'src/vm.c') diff --git a/src/vm.c b/src/vm.c index e5bbf657c..ae9bf2e69 100644 --- a/src/vm.c +++ b/src/vm.c @@ -156,6 +156,18 @@ envadjust(mrb_state *mrb, mrb_value *oldbase, mrb_value *newbase, size_t size) e->stack = newbase + off; } + + if (ci->proc && MRB_PROC_ENV_P(ci->proc) && ci->env != MRB_PROC_ENV(ci->proc)) { + e = MRB_PROC_ENV(ci->proc); + + if (e && MRB_ENV_STACK_SHARED_P(e) && + (st = e->stack) && oldbase <= st && st < oldbase+size) { + ptrdiff_t off = e->stack - oldbase; + + e->stack = newbase + off; + } + } + ci->stackent = newbase + (ci->stackent - oldbase); ci++; } -- cgit v1.2.3