Skip to content

Commit acdb7f4

Browse files
committed
Avoid unnecessary allocations
1 parent d0e579e commit acdb7f4

2 files changed

Lines changed: 18 additions & 12 deletions

File tree

object.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2951,9 +2951,11 @@ rb_obj_ivar_set_m(VALUE obj, VALUE iv, VALUE val)
29512951
ID id = id_for_var(obj, iv, instance);
29522952
if (!id) id = rb_intern_str(iv);
29532953
VALUE pair = rb_ary_new_capa(2);
2954-
rb_ary_push(pair, iv);
2955-
rb_ary_push(pair, val);
2956-
EXEC_EVENT_HOOK(GET_EC(), RUBY_EVENT_IVAR_SET, obj, id, 0, 0, pair);
2954+
if (ruby_vm_event_flags & RUBY_EVENT_IVAR_SET) {
2955+
rb_ary_push(pair, iv);
2956+
rb_ary_push(pair, val);
2957+
EXEC_EVENT_HOOK(GET_EC(), RUBY_EVENT_IVAR_SET, obj, id, 0, 0, pair);
2958+
}
29572959
return rb_ivar_set(obj, id, val);
29582960
}
29592961

vm_insnhelper.c

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1642,11 +1642,13 @@ 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+
if ((ruby_vm_event_flags & RUBY_EVENT_IVAR_SET)) {
1646+
VALUE pair = rb_ary_new_capa(2);
1647+
rb_ary_push(pair, rb_id2sym(id));
1648+
rb_ary_push(pair, val);
16481649

1649-
EXEC_EVENT_HOOK(GET_EC(), RUBY_EVENT_IVAR_SET, obj, id, 0, 0, pair);
1650+
EXEC_EVENT_HOOK(GET_EC(), RUBY_EVENT_IVAR_SET, obj, id, 0, 0, pair);
1651+
}
16501652

16511653
if (UNLIKELY(UNDEF_P(vm_setivar(obj, id, val, dest_shape_id, index)))) {
16521654
switch (BUILTIN_TYPE(obj)) {
@@ -4793,11 +4795,13 @@ vm_call_method_each_type(rb_execution_context_t *ec, rb_control_frame_t *cfp, st
47934795
!(ruby_vm_event_enabled_global_flags & RUBY_EVENT_IVAR_SET)));
47944796
}
47954797

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);
4798+
if (ruby_vm_event_flags & RUBY_EVENT_IVAR_SET) {
4799+
ID mid = vm_cc_cme(cc)->def->body.attr.id;
4800+
VALUE pair = rb_ary_new_capa(2);
4801+
rb_ary_push(pair, rb_id2sym(mid));
4802+
rb_ary_push(pair, v);
4803+
EXEC_EVENT_HOOK(ec, RUBY_EVENT_IVAR_SET, calling->recv, mid, mid, 0, pair);
4804+
}
48014805

48024806
return v;
48034807

0 commit comments

Comments
 (0)