* vm_eval.c (eval_string_with_cref): A binding should keep

refinements activation information and the refinements should be
  activated in subsequent eval calls with the binding.
  [ruby-core:67945] [Bug #10818]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49851 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
shugo 2015-03-05 02:56:03 +00:00
parent e5eb9a16df
commit f403624a6f
3 changed files with 39 additions and 20 deletions

View file

@ -1304,10 +1304,15 @@ eval_string_with_cref(VALUE self, VALUE src, VALUE scope, NODE *const cref_arg,
th->parse_in_eval--;
if (!cref && base_block->iseq) {
orig_cref = rb_vm_get_cref(base_block->iseq, base_block->ep);
cref = NEW_CREF(Qnil);
crefval = (VALUE) cref;
COPY_CREF(cref, orig_cref);
if (NIL_P(scope)) {
orig_cref = rb_vm_get_cref(base_block->iseq, base_block->ep);
cref = NEW_CREF(Qnil);
crefval = (VALUE) cref;
COPY_CREF(cref, orig_cref);
}
else {
cref = rb_vm_get_cref(base_block->iseq, base_block->ep);
}
}
vm_set_eval_stack(th, iseqval, cref, base_block);
th->cfp->klass = CLASS_OF(base_block->self);