Skip to content

Commit 5539b2c

Browse files
Merge pull request #10801 from dotty-staging/fix-JSR-45-repositioning
Fix JSR-45 repositioning
2 parents 3aa9b6e + 8bdd0aa commit 5539b2c

File tree

3 files changed

+33
-3
lines changed

3 files changed

+33
-3
lines changed

compiler/src/dotty/tools/dotc/typer/Inliner.scala

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -238,9 +238,10 @@ object Inliner {
238238
class Reposition extends TreeMap(cpyWithNewSource) {
239239

240240
override def transform(tree: Tree)(using Context): Tree = {
241+
def fixSpan[T <: untpd.Tree](copied: T): T =
242+
copied.withSpan(if tree.source == curSource then tree.span else callSpan)
241243
def finalize(copied: untpd.Tree) =
242-
val span = if tree.source == curSource then tree.span else callSpan
243-
copied.withSpan(span).withAttachmentsFrom(tree).withTypeUnchecked(tree.tpe)
244+
fixSpan(copied).withAttachmentsFrom(tree).withTypeUnchecked(tree.tpe)
244245

245246
inContext(ctx.withSource(curSource)) {
246247
tree match
@@ -252,7 +253,8 @@ object Inliner {
252253
case tree: Bind => finalize(untpd.Bind(tree.name, transform(tree.body))(curSource))
253254
case tree: TypeTree => finalize(tpd.TypeTree(tree.tpe))
254255
case tree: DefTree => super.transform(tree).setDefTree
255-
case _ => super.transform(tree)
256+
case EmptyTree => tree
257+
case _ => fixSpan(super.transform(tree))
256258
}
257259
}
258260
}

tests/run/assert-stack.check

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
scala.runtime.Scala3RunTime$.assertFailed(Scala3RunTime.scala:8)
2+
Test$.main(assert-stack.scala:7)
3+
4+
scala.runtime.Scala3RunTime$.assertFailed(Scala3RunTime.scala:11)
5+
Test$.main(assert-stack.scala:12)
6+

tests/run/assert-stack.scala

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
2+
3+
object Test {
4+
5+
def main(args: Array[String]): Unit = {
6+
try
7+
assert(false, "my message")
8+
catch
9+
case ae: AssertionError => printStack(ae)
10+
11+
try
12+
assert(false)
13+
catch
14+
case ae: AssertionError => printStack(ae)
15+
}
16+
17+
def printStack(ae: AssertionError): Unit =
18+
for elem <- ae.getStackTrace().iterator.takeWhile(x => !(x.getMethodName == "main" && x.getLineNumber == -1)) do
19+
println(elem)
20+
println()
21+
22+
}

0 commit comments

Comments
 (0)