Bug #20479
closed
Ensure line number in begin...end in method
Added by kddnewton (Kevin Newton) about 2 months ago.
Updated 29 days ago.
Description
In the following example:
def foo
begin
rescue
p :rescue
ensure
p :ensure
end
end
the ISEQ has the label: #<ISeq:ensure in foo@test.rb:6 (6,4)-(6,13)>
, but tracepoint reports that first_lineno
is 1. This is coming straight from the AST, which says @ NODE_ENSURE (id: 12, line: 1, location: (2,7)-(6,13))
.
This seems incorrect. The rescue
knows that its line starts on line 3, but ensure
says it starts on line 1. Could we change that to reflect the actual line it's on?
Is the line number in NODE_ENSURE visible to the user?
When I introduced node location, I wanted to match the line number with the first_lineno of the location if possible. However, since lineno has been heuristically tuned and there was already code that depended on it, I could not match it exactly.
If the incompatibility of changing the line number in NODE_ENSURE is not a problem, we can change it.
It's only visible if you manually RubyVM::InstructionSequence.compile
and then specifically ask an ensure ISEQ for first_lineno
. This doesn't seem likely, and since RubyVM::ISEQ is private, it should be okay?
Just to check back in @mame (Yusuke Endoh) because it's only the first_lineno
field, is that okay to change?
- Status changed from Open to Closed
Also available in: Atom
PDF
Like0
Like0Like0Like0Like0Like0