diff options
| -rw-r--r-- | mrbgems/mruby-eval/src/eval.c | 3 | ||||
| -rw-r--r-- | mrbgems/mruby-eval/test/eval.rb | 13 |
2 files changed, 16 insertions, 0 deletions
diff --git a/mrbgems/mruby-eval/src/eval.c b/mrbgems/mruby-eval/src/eval.c index ece769faf..56f4877cc 100644 --- a/mrbgems/mruby-eval/src/eval.c +++ b/mrbgems/mruby-eval/src/eval.c @@ -132,6 +132,9 @@ create_proc_from_string(mrb_state *mrb, char *s, int len, mrb_value binding, cha } proc = mrb_generate_code(mrb, p); + if (mrb->c->ci[-1].proc->target_class) { + proc->target_class = mrb->c->ci[-1].proc->target_class; + } e = (struct REnv*)mrb_obj_alloc(mrb, MRB_TT_ENV, (struct RClass*)mrb->c->ci[-1].proc->env); e->mid = mrb->c->ci[-1].mid; e->cioff = mrb->c->ci - mrb->c->cibase - 1; diff --git a/mrbgems/mruby-eval/test/eval.rb b/mrbgems/mruby-eval/test/eval.rb index 87c64732d..a4e7786da 100644 --- a/mrbgems/mruby-eval/test/eval.rb +++ b/mrbgems/mruby-eval/test/eval.rb @@ -60,3 +60,16 @@ assert('String instance_eval') do assert_equal('test') { obj.instance_eval('@test') } assert_equal('test') { obj.instance_eval { @test } } end + +assert('Kernel.#eval(string) context') do + class TestEvalConstScope + EVAL_CONST_CLASS = 'class' + def const_string + eval 'EVAL_CONST_CLASS' + end + end + obj = TestEvalConstScope.new + assert_raise(NameError) { eval 'EVAL_CONST_CLASS' } + assert_equal('class') { obj.const_string } +end + |
