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