Project

General

Profile

Actions

Bug #9964

closed

TracePoint invoke unexpected b_call events with redo

Added by ko1 (Koichi Sasada) over 10 years ago. Updated over 10 years ago.

Status:
Closed
Target version:
ruby -v:
ruby 2.2
[ruby-dev:48305]

Description

次のようなプログラムで、無限に b_call が発生し、対応する b_return が発生しません。

1.times{
  redo
}

これは、redo で b_call イベントを発生するところまで戻ってしまうためです。
redo した時、b_call イベントを発生する trace の へ戻るように変更することで解決できます。

Index: compile.c
===================================================================
--- compile.c	(revision 46468)
+++ compile.c	(working copy)
@@ -483,8 +483,8 @@
 		LABEL *start = iseq->compile_data->start_label = NEW_LABEL(0);
 		LABEL *end = iseq->compile_data->end_label = NEW_LABEL(0);
 
+		ADD_TRACE(ret, FIX2INT(iseq->location.first_lineno), RUBY_EVENT_B_CALL);
 		ADD_LABEL(ret, start);
-		ADD_TRACE(ret, FIX2INT(iseq->location.first_lineno), RUBY_EVENT_B_CALL);
 		COMPILE(ret, "block body", node->nd_body);
 		ADD_LABEL(ret, end);
 		ADD_TRACE(ret, nd_line(node), RUBY_EVENT_B_RETURN);

例によって 2.0 まで同じような問題があります。

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0