Merge pull request #4039 from i110/i110/fix-broken-lexical-variables

fix broken lexical variables
This commit is contained in:
Yukihiro "Matz" Matsumoto
2018-06-07 16:02:30 +09:00
committed by GitHub
2 changed files with 16 additions and 2 deletions
+16
View File
@@ -99,3 +99,19 @@ assert('Object#instance_eval with begin-rescue-ensure execution order') do
hell_raiser = HellRaiser.new
assert_equal([:enter_raise_hell, :begin, :rescue, :ensure], hell_raiser.raise_hell)
end
assert('Kernel.#eval(strinng) Issue #4021') do
assert_equal('FOO') { (eval <<'EOS').call }
foo = "FOO"
Proc.new { foo }
EOS
assert_equal('FOO') {
def do_eval(code)
eval(code)
end
do_eval(<<'EOS').call
foo = "FOO"
Proc.new { foo }
EOS
}
end
-2
View File
@@ -528,8 +528,6 @@ mrb_exec_irep(mrb_state *mrb, mrb_value self, struct RProc *p)
return MRB_PROC_CFUNC(p)(mrb, self);
}
ci->nregs = p->body.irep->nregs;
ci->env = MRB_PROC_ENV(p);
if (ci->env) ci->env->stack[0] = self;
if (ci->argc < 0) keep = 3;
else keep = ci->argc + 2;
if (ci->nregs < keep) {