Skip to content

Commit

Permalink
* iseq.c (rb_iseq_line_trace_each): iterate `line' event only.
Browse files Browse the repository at this point in the history
* test/ruby/test_iseq.rb: add a test for this change.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38133 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  • Loading branch information
ko1 committed Dec 1, 2012
1 parent 921385a commit 5bdd039
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 9 deletions.
6 changes: 6 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
Sun Dec 2 05:01:58 2012 Koichi Sasada <ko1@atdot.net>

* iseq.c (rb_iseq_line_trace_each): iterate `line' event only.

* test/ruby/test_iseq.rb: add a test for this change.

Sun Dec 2 02:46:04 2012 Koichi Sasada <ko1@atdot.net>

* vm_trace.c: add TracePoint#inspect.
Expand Down
22 changes: 13 additions & 9 deletions iseq.c
Original file line number Diff line number Diff line change
Expand Up @@ -1954,15 +1954,19 @@ rb_iseq_line_trace_each(VALUE iseqval, int (*func)(int line, rb_event_flag_t *ev

if (insn == BIN(trace)) {
rb_event_flag_t current_events = (VALUE)iseq->iseq[pos+1];
rb_event_flag_t events = current_events & RUBY_EVENT_SPECIFIED_LINE;
trace_num++;

if (func) {
int line = find_line_no(iseq, pos);
/* printf("line: %d\n", line); */
cont = (*func)(line, &events, data);
if (current_events != events) {
iseq->iseq[pos+1] = iseq->iseq_encoded[pos+1] = (VALUE)(current_events | (events & RUBY_EVENT_SPECIFIED_LINE));

if (current_events & RUBY_EVENT_LINE) {
rb_event_flag_t events = current_events & RUBY_EVENT_SPECIFIED_LINE;
trace_num++;

if (func) {
int line = find_line_no(iseq, pos);
/* printf("line: %d\n", line); */
cont = (*func)(line, &events, data);
if (current_events != events) {
iseq->iseq[pos+1] = iseq->iseq_encoded[pos+1] =
(VALUE)(current_events | (events & RUBY_EVENT_SPECIFIED_LINE));
}
}
}
}
Expand Down
12 changes: 12 additions & 0 deletions test/ruby/test_iseq.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,15 @@ def test_disasm_encoding
Encoding.default_internal = enc
end

LINE_BEFORE_METHOD = __LINE__
def method_test_line_trace

a = 1

b = 2

end

def test_line_trace
iseq = ISeq.compile \
%q{ a = 1
Expand All @@ -48,6 +57,9 @@ def test_line_trace
iseq.eval
}
assert_equal([2, 5], result)

iseq = ISeq.of(self.class.instance_method(:method_test_line_trace))
assert_equal([LINE_BEFORE_METHOD + 3, LINE_BEFORE_METHOD + 5], iseq.line_trace_all)
end

LINE_OF_HERE = __LINE__
Expand Down

0 comments on commit 5bdd039

Please sign in to comment.