Skip to content

Commit ab83b26

Browse files
authored
Merge pull request scala#5296 from retronym/ticket/SD-186
SD-186 Fix positions in trait method bytecode
2 parents 8d87b62 + 04649c7 commit ab83b26

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

src/compiler/scala/tools/nsc/ast/TreeGen.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,7 @@ abstract class TreeGen extends scala.reflect.internal.TreeGen with TreeDSL {
350350
case mt @ MethodType(params, res) => copyMethodType(mt, selfParamSym :: params, res)
351351
})
352352
val selfParam = ValDef(selfParamSym)
353-
val rhs = orig.rhs.substituteThis(newSym.owner, atPos(newSym.pos)(gen.mkAttributedIdent(selfParamSym)))
353+
val rhs = orig.rhs.substituteThis(newSym.owner, gen.mkAttributedIdent(selfParamSym)) // SD-186 intentionally leaving Ident($this) is unpositioned
354354
.substituteSymbols(origParams, newSym.info.params.drop(1)).changeOwner(origSym -> newSym)
355355
treeCopy.DefDef(orig, orig.mods, orig.name, orig.tparams, (selfParam :: orig.vparamss.head) :: Nil, orig.tpt, rhs).setSymbol(newSym)
356356
}

test/junit/scala/tools/nsc/backend/jvm/BytecodeTest.scala

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,4 +168,23 @@ class BytecodeTest extends BytecodeTesting {
168168
assertEquals(x.start, labels(1))
169169
assertEquals(x.end, labels(7))
170170
}
171+
172+
@Test // wrong line numbers for rewritten `this` references in trait static methods
173+
def sd186_traitLineNumber(): Unit = {
174+
val code =
175+
"""trait T {
176+
| def t(): Unit = {
177+
| toString
178+
| toString
179+
| }
180+
|}
181+
""".stripMargin
182+
val t = compileClass(code)
183+
val tMethod = getMethod(t, "t$")
184+
val invoke = Invoke(INVOKEVIRTUAL, "java/lang/Object", "toString", "()Ljava/lang/String;", false)
185+
assertSameCode(tMethod.instructions,
186+
List(Label(0), LineNumber(3, Label(0)), VarOp(ALOAD, 0), invoke, Op(POP),
187+
Label(5), LineNumber(4, Label(5)), VarOp(ALOAD, 0), invoke, Op(POP), Op(RETURN), Label(11))
188+
)
189+
}
171190
}

0 commit comments

Comments
 (0)