From: nagachika00@... Date: 2017-07-09T19:47:34+00:00 Subject: [ruby-core:81978] [Ruby trunk Bug#13369] TracePoint gives incorrect `return_value` after rescuing error when using `return` Issue #13369 has been updated by nagachika (Tomoyuki Chikanaga). Backport changed from 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: REQUIRED to 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: DONE ruby_2_4 r59296 merged revision(s) 58262,5826. ---------------------------------------- Bug #13369: TracePoint gives incorrect `return_value` after rescuing error when using `return` https://bugs.ruby-lang.org/issues/13369#change-65704 * Author: backus (John Backus) * Status: Closed * Priority: Normal * Assignee: * Target version: * ruby -v: ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-darwin16] * Backport: 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: DONE ---------------------------------------- In the following example ```ruby class Foo MyError = Class.new(StandardError) def example1 norf rescue MyError => error 2 end def example2 norf rescue MyError => error return 2 end def norf raise MyError end end trace = TracePoint.new(:return) do |tp| puts "#{tp.defined_class}##{tp.method_id} RETURNS #{tp.return_value.inspect}" end trace.enable Foo.new.example1 # => 2 puts Foo.new.example2 # => 2 # >> Foo#norf RETURNS nil # >> Foo#example1 RETURNS 2 # >> # >> Foo#norf RETURNS nil # >> Foo#example2 RETURNS nil ``` Both `example1` AND `example2` return 2. For some reason though, the tracepoint event for `example2` says that it returns `nil`. ---Files-------------------------------- tracepoint-bug-example.rb (529 Bytes) diff.patch (1.29 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: