diff --git a/vm_eval.c b/vm_eval.c index 22b3e1e..3bd2b35 100644 --- a/vm_eval.c +++ b/vm_eval.c @@ -180,11 +180,15 @@ vm_call0_body(rb_thread_t* th, rb_call_info_t *ci, const VALUE *argv) goto success; case VM_METHOD_TYPE_ATTRSET: rb_check_arity(ci->argc, 1, 1); + EXEC_EVENT_HOOK(th, RUBY_EVENT_C_CALL, ci->recv, ci->mid, ci->defined_class, Qnil); ret = rb_ivar_set(ci->recv, ci->me->def->body.attr.id, argv[0]); + EXEC_EVENT_HOOK(th, RUBY_EVENT_C_RETURN, ci->recv, ci->mid, ci->defined_class, ret); goto success; case VM_METHOD_TYPE_IVAR: rb_check_arity(ci->argc, 0, 0); + EXEC_EVENT_HOOK(th, RUBY_EVENT_C_CALL, ci->recv, ci->mid, ci->defined_class, Qnil); ret = rb_attr_get(ci->recv, ci->me->def->body.attr.id); + EXEC_EVENT_HOOK(th, RUBY_EVENT_C_RETURN, ci->recv, ci->mid, ci->defined_class, ret); goto success; case VM_METHOD_TYPE_BMETHOD: ret = vm_call_bmethod_body(th, ci, argv); diff --git a/vm_insnhelper.c b/vm_insnhelper.c index e3e9172..7d06717 100644 --- a/vm_insnhelper.c +++ b/vm_insnhelper.c @@ -1615,16 +1615,22 @@ vm_call_cfunc(rb_thread_t *th, rb_control_frame_t *reg_cfp, rb_call_info_t *ci) static VALUE vm_call_ivar(rb_thread_t *th, rb_control_frame_t *cfp, rb_call_info_t *ci) { + const rb_method_entry_t *me = ci->me; + EXEC_EVENT_HOOK(th, RUBY_EVENT_C_CALL, ci->recv, me->called_id, me->klass, Qnil); VALUE val = vm_getivar(ci->recv, ci->me->def->body.attr.id, 0, ci, 1); cfp->sp -= 1; + EXEC_EVENT_HOOK(th, RUBY_EVENT_C_RETURN, ci->recv, me->called_id, me->klass, val); return val; } static VALUE vm_call_attrset(rb_thread_t *th, rb_control_frame_t *cfp, rb_call_info_t *ci) { + const rb_method_entry_t *me = ci->me; + EXEC_EVENT_HOOK(th, RUBY_EVENT_C_CALL, ci->recv, me->called_id, me->klass, Qnil); VALUE val = vm_setivar(ci->recv, ci->me->def->body.attr.id, *(cfp->sp - 1), 0, ci, 1); cfp->sp -= 2; + EXEC_EVENT_HOOK(th, RUBY_EVENT_C_RETURN, ci->recv, me->called_id, me->klass, val); return val; }