mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Set first line numbers for empty iseqs.
* compile.c (iseq_compile_each): for empty method, block and so on, `last_line` is not set so that line number of `putnil` instruction will be zero. This patch set `first_lineno` for such `putnil`. Problem is reported by deivid-rodriguez via Yuichiro Kaneko. * test/ruby/test_iseq.rb: add a test for this spec. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61457 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
7361587fff
commit
360c00572f
2 changed files with 36 additions and 1 deletions
|
@ -5413,8 +5413,10 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, const NODE *node, int poppe
|
|||
{
|
||||
if (node == 0) {
|
||||
if (!popped) {
|
||||
int lineno = ISEQ_COMPILE_DATA(iseq)->last_line;
|
||||
if (lineno == 0) lineno = FIX2INT(rb_iseq_first_lineno(iseq));
|
||||
debugs("node: NODE_NIL(implicit)\n");
|
||||
ADD_INSN(ret, ISEQ_COMPILE_DATA(iseq)->last_line, putnil);
|
||||
ADD_INSN(ret, lineno, putnil);
|
||||
}
|
||||
return COMPILE_OK;
|
||||
}
|
||||
|
|
|
@ -357,4 +357,37 @@ class TestISeq < Test::Unit::TestCase
|
|||
[["<class:D>@17", [[17, :class],
|
||||
[18, :end]]]]], collect_iseq.call(sample_iseq)
|
||||
end
|
||||
|
||||
def test_empty_iseq_lineno
|
||||
iseq = ISeq.compile(<<-EOS)
|
||||
# 1
|
||||
# 2
|
||||
def foo # line 3 empty method
|
||||
end # line 4
|
||||
1.time do # line 5 empty block
|
||||
end # line 6
|
||||
class C # line 7 empty class
|
||||
end
|
||||
EOS
|
||||
|
||||
iseq.each_child{|ci|
|
||||
ary = ci.to_a
|
||||
type = ary[9]
|
||||
name = ary[5]
|
||||
line = ary[13].first
|
||||
case ary[9]
|
||||
when :method
|
||||
assert_equal "foo", name
|
||||
assert_equal 3, line
|
||||
when :class
|
||||
assert_equal '<class:C>', name
|
||||
assert_equal 7, line
|
||||
when :block
|
||||
assert_equal 'block in <compiled>', name
|
||||
assert_equal 5, line
|
||||
else
|
||||
raise "unknown ary: " + ary.inspect
|
||||
end
|
||||
}
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue