diff options
author | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-12-25 00:27:17 +0000 |
---|---|---|
committer | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-12-25 00:27:17 +0000 |
commit | 360c00572feb09da9d1575f667348773acfdcefd (patch) | |
tree | 05f070dcfc2908f5ae90533c9cd3161e325ba237 /compile.c | |
parent | 7361587fffcddef72b11e611cb12726be2772513 (diff) |
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
Diffstat (limited to 'compile.c')
-rw-r--r-- | compile.c | 4 |
1 files changed, 3 insertions, 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; } |