aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--vm_eval.c11
2 files changed, 13 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index f31f38d8db..6a40fcf7f5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Fri Mar 7 19:14:11 2014 Eric Wong <e@80x24.org>
+
+ * vm_eval.c (vm_call0_body): fix RB_GC_GUARD location
+ (check_funcall_exec): ditto
+ [Bug #9609]
+
Fri Mar 7 14:48:17 2014 Narihiro Nakamura <authornari@gmail.com>
* parse.y (ENC_SINGLE): Unused macro removed.
diff --git a/vm_eval.c b/vm_eval.c
index 3f34810fbb..52cf824a54 100644
--- a/vm_eval.c
+++ b/vm_eval.c
@@ -210,10 +210,11 @@ vm_call0_body(rb_thread_t* th, rb_call_info_t *ci, const VALUE *argv)
{
VALUE new_args = rb_ary_new4(ci->argc, argv);
- RB_GC_GUARD(new_args);
rb_ary_unshift(new_args, ID2SYM(ci->mid));
th->passed_block = ci->blockptr;
- return rb_funcall2(ci->recv, idMethodMissing, ci->argc+1, RARRAY_PTR(new_args));
+ ret = rb_funcall2(ci->recv, idMethodMissing, ci->argc+1, RARRAY_PTR(new_args));
+ RB_GC_GUARD(new_args);
+ return ret;
}
case VM_METHOD_TYPE_OPTIMIZED:
switch (ci->me->def->body.optimize_type) {
@@ -338,11 +339,13 @@ static VALUE
check_funcall_exec(struct rescue_funcall_args *args)
{
VALUE new_args = rb_ary_new4(args->argc, args->argv);
+ VALUE ret;
- RB_GC_GUARD(new_args);
rb_ary_unshift(new_args, args->sym);
- return rb_funcall2(args->recv, idMethodMissing,
+ ret = rb_funcall2(args->recv, idMethodMissing,
args->argc+1, RARRAY_PTR(new_args));
+ RB_GC_GUARD(new_args);
+ return ret;
}
static VALUE