@@ -1642,11 +1642,16 @@ vm_setinstancevariable(const rb_iseq_t *iseq, VALUE obj, ID id, VALUE val, IVC i
16421642 attr_index_t index ;
16431643 vm_ic_atomic_shape_and_index (ic , & dest_shape_id , & index );
16441644
1645- VALUE pair = rb_ary_new_capa (2 );
1646- rb_ary_push (pair , rb_id2sym (id ));
1647- rb_ary_push (pair , val );
1645+ bool ivar_set_event_enabled = (ruby_vm_event_enabled_global_flags & RUBY_EVENT_IVAR_SET ) &&
1646+ (ruby_vm_event_flags & RUBY_EVENT_IVAR_SET );
16481647
1649- EXEC_EVENT_HOOK (GET_EC (), RUBY_EVENT_IVAR_SET , obj , id , 0 , 0 , pair );
1648+ if (ivar_set_event_enabled ) {
1649+ VALUE pair = rb_ary_new_capa (2 );
1650+ rb_ary_push (pair , rb_id2sym (id ));
1651+ rb_ary_push (pair , val );
1652+
1653+ EXEC_EVENT_HOOK (GET_EC (), RUBY_EVENT_IVAR_SET , obj , id , 0 , 0 , pair );
1654+ }
16501655
16511656 if (UNLIKELY (UNDEF_P (vm_setivar (obj , id , val , dest_shape_id , index )))) {
16521657 switch (BUILTIN_TYPE (obj )) {
@@ -4759,15 +4764,15 @@ vm_call_method_each_type(rb_execution_context_t *ec, rb_control_frame_t *cfp, st
47594764 rb_check_arity (calling -> argc , 1 , 1 );
47604765
47614766 const unsigned int aset_mask = (VM_CALL_ARGS_SPLAT | VM_CALL_KW_SPLAT | VM_CALL_KWARG | VM_CALL_FORWARDING );
4767+ bool ivar_set_event_enabled = (ruby_vm_event_enabled_global_flags & RUBY_EVENT_IVAR_SET ) && (ruby_vm_event_flags & RUBY_EVENT_IVAR_SET );
47624768
47634769 if (vm_cc_markable (cc )) {
47644770 vm_cc_attr_index_initialize (cc , INVALID_SHAPE_ID );
47654771 VM_CALL_METHOD_ATTR (v ,
47664772 vm_call_attrset_direct (ec , cfp , cc , calling -> recv ),
47674773 CC_SET_FASTPATH (cc , vm_call_attrset ,
47684774 !(vm_ci_flag (ci ) & aset_mask ) &&
4769- !(ruby_vm_event_flags & RUBY_EVENT_IVAR_SET ) &&
4770- !(ruby_vm_event_enabled_global_flags & RUBY_EVENT_IVAR_SET )));
4775+ !ivar_set_event_enabled ));
47714776 }
47724777 else {
47734778 cc = & ((struct rb_callcache ) {
@@ -4789,15 +4794,16 @@ vm_call_method_each_type(rb_execution_context_t *ec, rb_control_frame_t *cfp, st
47894794 vm_call_attrset_direct (ec , cfp , cc , calling -> recv ),
47904795 CC_SET_FASTPATH (cc , vm_call_attrset ,
47914796 !(vm_ci_flag (ci ) & aset_mask ) &&
4792- !(ruby_vm_event_flags & RUBY_EVENT_IVAR_SET ) &&
4793- !(ruby_vm_event_enabled_global_flags & RUBY_EVENT_IVAR_SET )));
4797+ !ivar_set_event_enabled ));
47944798 }
47954799
4796- ID mid = vm_cc_cme (cc )-> def -> body .attr .id ;
4797- VALUE pair = rb_ary_new_capa (2 );
4798- rb_ary_push (pair , rb_id2sym (mid ));
4799- rb_ary_push (pair , v );
4800- EXEC_EVENT_HOOK (ec , RUBY_EVENT_IVAR_SET , calling -> recv , mid , mid , 0 , pair );
4800+ if (ivar_set_event_enabled ) {
4801+ ID mid = vm_cc_cme (cc )-> def -> body .attr .id ;
4802+ VALUE pair = rb_ary_new_capa (2 );
4803+ rb_ary_push (pair , rb_id2sym (mid ));
4804+ rb_ary_push (pair , v );
4805+ EXEC_EVENT_HOOK (ec , RUBY_EVENT_IVAR_SET , calling -> recv , mid , mid , 0 , pair );
4806+ }
48014807
48024808 return v ;
48034809
0 commit comments