aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--vm.c2
-rw-r--r--vm_insnhelper.c4
2 files changed, 6 insertions, 0 deletions
diff --git a/vm.c b/vm.c
index 70df6707b8..74ca28c5c7 100644
--- a/vm.c
+++ b/vm.c
@@ -998,12 +998,14 @@ invoke_iseq_block_from_c(rb_thread_t *th, const struct rb_captured_block *captur
th->passed_bmethod_me = NULL;
CHECK_VM_STACK_OVERFLOW(cfp, argc);
+ cfp->sp = sp + i;
for (i=0; i<argc; i++) {
sp[i] = argv[i];
}
opt_pc = vm_yield_setup_args(th, iseq, argc, sp, passed_block_handler,
(type == VM_FRAME_MAGIC_LAMBDA ? (splattable ? arg_setup_lambda : arg_setup_method) : arg_setup_block));
+ cfp->sp = sp;
if (me == NULL) {
return invoke_block(th, iseq, self, captured, cref, type, opt_pc);
diff --git a/vm_insnhelper.c b/vm_insnhelper.c
index a991e59562..695567ff21 100644
--- a/vm_insnhelper.c
+++ b/vm_insnhelper.c
@@ -2506,7 +2506,11 @@ vm_callee_setup_block_arg_arg0_check(VALUE *argv)
{
VALUE ary, arg0 = argv[0];
ary = rb_check_array_type(arg0);
+#if 0
argv[0] = arg0;
+#else
+ VM_ASSERT(argv[0] == arg0);
+#endif
return ary;
}