summaryrefslogtreecommitdiffhomepage
path: root/src/vm.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2016-01-02 22:01:00 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2016-01-02 22:01:00 +0900
commitaa1f668b80617bca1cfa204d18404a883c04c927 (patch)
tree4981db320fc5fefc42276bc2c24ffdfe4cd34bb1 /src/vm.c
parent879e27d0f171d4ab652099b47a9a626e3a2508c3 (diff)
downloadmruby-aa1f668b80617bca1cfa204d18404a883c04c927.tar.gz
mruby-aa1f668b80617bca1cfa204d18404a883c04c927.zip
instance_eval should pass the receiver as a block parameter; close #3029
Diffstat (limited to 'src/vm.c')
-rw-r--r--src/vm.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/vm.c b/src/vm.c
index 76d6b02c7..654555f3d 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -510,11 +510,13 @@ eval_under(mrb_state *mrb, mrb_value self, mrb_value blk, struct RClass *c)
}
ci = mrb->c->ci;
if (ci->acc == CI_ACC_DIRECT) {
- return mrb_yield_with_class(mrb, blk, 0, 0, self, c);
+ return mrb_yield_with_class(mrb, blk, 1, &self, self, c);
}
ci->target_class = c;
p = mrb_proc_ptr(blk);
ci->proc = p;
+ ci->argc = 1;
+ mrb->c->stack[1] = self;
if (MRB_PROC_CFUNC_P(p)) {
return p->body.func(mrb, self);
}