Skip to content

Commit 9604c68

Browse files
committed
merge revision(s) r46471: [Backport ruby#9964]
* compile.c (rb_iseq_compile_node): put start label of block after trace (b_call). [Bug ruby#9964] * test/ruby/test_settracefunc.rb: add a test. added assert_consistent_call_return() method check call/return consistency. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@47014 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
1 parent c0e3a07 commit 9604c68

File tree

4 files changed

+61
-2
lines changed

4 files changed

+61
-2
lines changed

ChangeLog

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,14 @@
1+
Thu Jul 31 01:56:11 2014 Koichi Sasada <[email protected]>
2+
3+
* compile.c (rb_iseq_compile_node): put start label of block after
4+
trace (b_call).
5+
[Bug #9964]
6+
7+
* test/ruby/test_settracefunc.rb: add a test.
8+
9+
added assert_consistent_call_return() method check call/return
10+
consistency.
11+
112
Thu Jul 31 01:22:43 2014 Koichi Sasada <[email protected]>
213

314
* vm.c (invoke_block_from_c): move call/return event timing for

compile.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -478,8 +478,8 @@ rb_iseq_compile_node(VALUE self, NODE *node)
478478
LABEL *start = iseq->compile_data->start_label = NEW_LABEL(0);
479479
LABEL *end = iseq->compile_data->end_label = NEW_LABEL(0);
480480

481-
ADD_LABEL(ret, start);
482481
ADD_TRACE(ret, FIX2INT(iseq->location.first_lineno), RUBY_EVENT_B_CALL);
482+
ADD_LABEL(ret, start);
483483
COMPILE(ret, "block body", node->nd_body);
484484
ADD_LABEL(ret, end);
485485
ADD_TRACE(ret, nd_line(node), RUBY_EVENT_B_RETURN);

test/ruby/test_settracefunc.rb

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1251,4 +1251,52 @@ def test_argument_error_on_bmethod
12511251

12521252
assert_equal [], events # should be empty.
12531253
end
1254+
1255+
def method_prefix event
1256+
case event
1257+
when :call, :return
1258+
:n
1259+
when :c_call, :c_return
1260+
:c
1261+
when :b_call, :b_return
1262+
:b
1263+
end
1264+
end
1265+
1266+
def method_label tp
1267+
"#{method_prefix(tp.event)}##{tp.method_id}"
1268+
end
1269+
1270+
def assert_consistent_call_return message='', check_events: nil
1271+
check_events ||= %i(a_call a_return)
1272+
call_events = []
1273+
return_events = []
1274+
1275+
TracePoint.new(*check_events){|tp|
1276+
next unless target_thread?
1277+
1278+
case tp.event.to_s
1279+
when /call/
1280+
call_events << method_label(tp)
1281+
when /return/
1282+
return_events << method_label(tp)
1283+
end
1284+
}.enable do
1285+
yield
1286+
end
1287+
1288+
assert_equal false, call_events.empty?
1289+
assert_equal false, return_events.empty?
1290+
assert_equal call_events, return_events.reverse, message
1291+
end
1292+
1293+
def test_b_call_with_redo
1294+
assert_consistent_call_return do
1295+
i = 0
1296+
1.times{
1297+
break if (i+=1) > 10
1298+
redo
1299+
}
1300+
end
1301+
end
12541302
end

version.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#define RUBY_VERSION "2.1.2"
22
#define RUBY_RELEASE_DATE "2014-07-31"
3-
#define RUBY_PATCHLEVEL 185
3+
#define RUBY_PATCHLEVEL 186
44

55
#define RUBY_RELEASE_YEAR 2014
66
#define RUBY_RELEASE_MONTH 7

0 commit comments

Comments
 (0)