diff options
Diffstat (limited to 'vm_macro.def')
-rw-r--r-- | vm_macro.def | 37 |
1 files changed, 21 insertions, 16 deletions
diff --git a/vm_macro.def b/vm_macro.def index 9a2d6eb12d..2cb9fd7c6d 100644 --- a/vm_macro.def +++ b/vm_macro.def @@ -56,23 +56,28 @@ MACRO macro_eval_setup_send_arguments(num, blockptr, flag, blockiseq) MACRO macro_eval_invoke_cfunc(num, id, recv, klass, mn, blockptr) { - rb_control_frame_t *cfp = - push_frame(th, 0, FRAME_MAGIC_CFUNC, - recv, (VALUE) blockptr, 0, GET_SP(), 0, 1); - cfp->callee_id = id; /* TODO */ - cfp->method_id = id; - cfp->method_klass = klass; - - reg_cfp->sp -= num + 1; - - val = call_cfunc(mn->nd_cfnc, recv, mn->nd_argc, num, reg_cfp->sp + 1); - if (reg_cfp != th->cfp + 1) { - SDR2(reg_cfp); - SDR2(th->cfp-5); - rb_bug("cfp consistency error - send"); - th->cfp = reg_cfp; + EXEC_EVENT_HOOK(th, RUBY_EVENT_C_CALL, recv, id, klass); + { + rb_control_frame_t *cfp = + push_frame(th, 0, FRAME_MAGIC_CFUNC, + recv, (VALUE) blockptr, 0, GET_SP(), 0, 1); + cfp->callee_id = id; /* TODO */ + cfp->method_id = id; + cfp->method_klass = klass; + + reg_cfp->sp -= num + 1; + + val = call_cfunc(mn->nd_cfnc, recv, mn->nd_argc, num, reg_cfp->sp + 1); + + if (reg_cfp != th->cfp + 1) { + SDR2(reg_cfp); + SDR2(th->cfp-5); + rb_bug("cfp consistency error - send"); + th->cfp = reg_cfp; + } + pop_frame(th); } - pop_frame(th); + EXEC_EVENT_HOOK(th, RUBY_EVENT_C_RETURN, recv, id, klass); } MACRO macro_eval_invoke_func(niseqval, recv, klass, blockptr, num) |