Project

General

Profile

Bug #4583 » trace_attr_accessors.patch

1.9.2 Full working patch - QaDeS (Michael Klaus), 04/18/2011 06:24 AM

View differences:

test/ruby/test_settracefunc.rb
assert_equal([], events[:set])
assert_equal([], events[:add])
end
attr_accessor :baz
def test_attr_accessor
events = []
set_trace_func(Proc.new { |event, file, lineno, mid, bidning, klass|
events << [event, lineno, mid, klass]
})
self.baz = baz
set_trace_func nil
assert_equal(["c-return", 364, :set_trace_func, Kernel], events.shift)
assert_equal(["line", 365, :test_attr_accessor, TestSetTraceFunc],
events.shift) # baz = baz
assert_equal(["c-call", 365, :baz, TestSetTraceFunc],
events.shift) # baz = baz
assert_equal(["c-return", 365, :baz, TestSetTraceFunc],
events.shift) # baz = baz
assert_equal(["c-call", 365, :baz=, TestSetTraceFunc],
events.shift) # baz = baz
assert_equal(["c-return", 365, :baz=, TestSetTraceFunc],
events.shift) # baz = baz
assert_equal(["line", 366, :test_attr_accessor, TestSetTraceFunc],
events.shift) # baz = baz
assert_equal(["c-call", 366, :set_trace_func, Kernel], events.shift)
assert_equal([], events)
end
end
vm_insnhelper.c
if (num != 1) {
rb_raise(rb_eArgError, "wrong number of arguments (%d for 1)", num);
}
EXEC_EVENT_HOOK(th, RUBY_EVENT_C_CALL, recv, id, me->klass);
val = rb_ivar_set(recv, me->def->body.attr.id, *(cfp->sp - 1));
EXEC_EVENT_HOOK(th, RUBY_EVENT_C_RETURN, recv, id, me->klass);
cfp->sp -= 2;
break;
}
......
if (num != 0) {
rb_raise(rb_eArgError, "wrong number of arguments (%d for 0)", num);
}
EXEC_EVENT_HOOK(th, RUBY_EVENT_C_CALL, recv, id, me->klass);
val = rb_attr_get(recv, me->def->body.attr.id);
EXEC_EVENT_HOOK(th, RUBY_EVENT_C_RETURN, recv, id, me->klass);
cfp->sp -= 1;
break;
}
(3-3/5)