From: Yasushi ANDO <andyjpn@...> Date: 2011-12-08T15:27:24+09:00 Subject: [ruby-core:41544] [ruby-trunk - Bug #5614] Proc#source_location & #inspect shows wrong line number when chained Issue #5614 has been updated by Yasushi ANDO. It may not a bug but a specification. A block returns the number of a line in which the block is defined for its "source_location." When you use procs instead of blocks, it returns the values you expected. Code: 1 require 'pp' 2 class Foo 3 def bar(&blk) 4 pp blk.source_location 5 self 6 end 7 end 8 9 Foo.new.bar(&proc{ 10 puts 'b1' 11 }).bar(&proc{ 12 puts 'b2' 13 }) Result: $ ruby procs.rb ["procs.rb", 9] ["procs.rb", 11] ---------------------------------------- Bug #5614: Proc#source_location & #inspect shows wrong line number when chained http://redmine.ruby-lang.org/issues/5614 Author: TzeYang Ng Status: Open Priority: Normal Assignee: Category: core Target version: 1.9.2 ruby -v: ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-linux] When procs are chained, the line number for each proc is mis-calculated to be the 1st proc's line-number. Eg. class Foo def bar(&blk) pp blk.source_location self end end Foo.new.bar do puts 'b1' end.bar do puts 'b2' end The 1st & 2nd procs show the same line number, when they shouldn't. Though i listed the target version as 1.9.2, this behaviour is consistent for all versions of mri. -- http://redmine.ruby-lang.org