diff options
author | nagachika <nagachika@ruby-lang.org> | 2020-09-06 11:05:52 +0900 |
---|---|---|
committer | nagachika <nagachika@ruby-lang.org> | 2020-09-06 11:05:52 +0900 |
commit | 3fef159f81fad6ffb9af5b60f4c8ec867fdb2391 (patch) | |
tree | 6b4902e5cc9c7491e02f062a6542aaee0990b112 /test/ruby | |
parent | e778de2c82478dda930cfc8d795ed4e0e60ea775 (diff) | |
download | ruby-3fef159f81fad6ffb9af5b60f4c8ec867fdb2391.tar.gz |
merge revision(s) 3e02cd518fbe4d91c2aca7fbc3c5aafa387d3cb7: [Backport #17149]
Trace :return of builtin methods
using opt_invokebuiltin_delegate_leave insn.
Since Ruby 2.7, :return of methods using builtin have not been traced properly.
Diffstat (limited to 'test/ruby')
-rw-r--r-- | test/ruby/test_settracefunc.rb | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/test/ruby/test_settracefunc.rb b/test/ruby/test_settracefunc.rb index ada7b7596a..e9e22aed8a 100644 --- a/test/ruby/test_settracefunc.rb +++ b/test/ruby/test_settracefunc.rb @@ -2279,4 +2279,18 @@ class TestSetTraceFunc < Test::Unit::TestCase def test_stat_exists assert_instance_of Hash, TracePoint.stat end + + def test_tracepoint_opt_invokebuiltin_delegate_leave + code = 'puts RubyVM::InstructionSequence.of("\x00".method(:unpack)).disasm' + out, _err, _status = EnvUtil.invoke_ruby(['-e', code], '', true) + assert_match /^0000 opt_invokebuiltin_delegate_leave /, out + + events = [] + TracePoint.new(:return) do |tp| + events << [tp.event, tp.method_id] + end.enable do + "\x00".unpack("c") + end + assert_equal [[:return, :unpack]], events + end end |