summaryrefslogtreecommitdiffhomepage
path: root/src/kernel.c
diff options
context:
space:
mode:
authorYukihiro Matsumoto <[email protected]>2012-07-24 23:16:41 +0900
committerYukihiro Matsumoto <[email protected]>2012-07-24 23:16:41 +0900
commit88b638cf823741e3db204856e43f422229a1005c (patch)
treebdad0aae88a9dbb213ff0927596ab3370a38dfb4 /src/kernel.c
parent42b7d75a6728d4a17af68ee8e0bd4b0dabf7e9ab (diff)
downloadmruby-88b638cf823741e3db204856e43f422229a1005c.tar.gz
mruby-88b638cf823741e3db204856e43f422229a1005c.zip
instance_eval should set target_class in the block
Diffstat (limited to 'src/kernel.c')
-rw-r--r--src/kernel.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/kernel.c b/src/kernel.c
index e75fcfc88..468891b23 100644
--- a/src/kernel.c
+++ b/src/kernel.c
@@ -555,6 +555,8 @@ mrb_obj_init_copy(mrb_state *mrb, mrb_value self)
return self;
}
+mrb_value mrb_yield_internal(mrb_state *mrb, mrb_value b, int argc, mrb_value *argv, mrb_value self, struct RClass *c);
+
/* 15.3.1.3.18 */
/*
* call-seq:
@@ -580,11 +582,13 @@ mrb_value
mrb_obj_instance_eval(mrb_state *mrb, mrb_value self)
{
mrb_value a, b;
+ mrb_value cv;
if (mrb_get_args(mrb, "|S&", &a, &b) == 1) {
mrb_raise(mrb, E_NOTIMP_ERROR, "instance_eval with string not implemented");
}
- return mrb_yield_with_self(mrb, b, 0, 0, self);
+ cv = mrb_singleton_class(mrb, self);
+ return mrb_yield_internal(mrb, b, 0, 0, self, mrb_class_ptr(cv));
}
int