Project

General

Profile

Actions

Bug #5614

closed

Proc#source_location & #inspect shows wrong line number when chained

Added by ngtzeyang (TzeYang Ng) almost 11 years ago. Updated almost 11 years ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
ruby -v:
ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-linux]
Backport:
[ruby-core:40936]

Description

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.


Files

proc_test.rb (969 Bytes) proc_test.rb ngtzeyang (TzeYang Ng), 11/11/2011 02:17 PM

Updated by technohippy (Yasushi ANDO) almost 11 years ago

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]

Actions #2

Updated by nobu (Nobuyoshi Nakada) almost 11 years ago

  • Status changed from Open to Closed
  • % Done changed from 0 to 100

This issue was solved with changeset r34031.
TzeYang, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.


Actions

Also available in: Atom PDF