summaryrefslogtreecommitdiff
path: root/test/ruby
diff options
context:
space:
mode:
authorTakashi Kokubun <takashikkbn@gmail.com>2020-06-23 23:41:57 -0700
committerTakashi Kokubun <takashikkbn@gmail.com>2020-06-23 23:42:38 -0700
commit3e02cd518fbe4d91c2aca7fbc3c5aafa387d3cb7 (patch)
treeeee79b71a547956ea23d19cc5799fee46938d12c /test/ruby
parentfbb32b1f483925987d225b4dc08efd197775bcae (diff)
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.rb14
1 files changed, 14 insertions, 0 deletions
diff --git a/test/ruby/test_settracefunc.rb b/test/ruby/test_settracefunc.rb
index 300033ae7e..80490204ca 100644
--- a/test/ruby/test_settracefunc.rb
+++ b/test/ruby/test_settracefunc.rb
@@ -2292,4 +2292,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