aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/core/Decorators.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2016-09-01 19:10:48 +0200
committerMartin Odersky <odersky@gmail.com>2016-10-02 16:11:21 +0200
commit617be516b261524c2f0762de10f2bde376043ad7 (patch)
tree093df00ecbb02bfe5b06b2040fad953a613b4f20 /src/dotty/tools/dotc/core/Decorators.scala
parentfaba2b7999bf73bf10116b391efbdd751054ead0 (diff)
downloaddotty-617be516b261524c2f0762de10f2bde376043ad7.tar.gz
dotty-617be516b261524c2f0762de10f2bde376043ad7.tar.bz2
dotty-617be516b261524c2f0762de10f2bde376043ad7.zip
Print inlining positions in error messages
Error messages now print the inlined positions as well as the position of the inlined call, recursively.
Diffstat (limited to 'src/dotty/tools/dotc/core/Decorators.scala')
-rw-r--r--src/dotty/tools/dotc/core/Decorators.scala14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/dotty/tools/dotc/core/Decorators.scala b/src/dotty/tools/dotc/core/Decorators.scala
index 387e7e466..fc546667d 100644
--- a/src/dotty/tools/dotc/core/Decorators.scala
+++ b/src/dotty/tools/dotc/core/Decorators.scala
@@ -7,6 +7,8 @@ import Contexts._, Names._, Phases._, printing.Texts._, printing.Printer, printi
import util.Positions.Position, util.SourcePosition
import collection.mutable.ListBuffer
import dotty.tools.dotc.transform.TreeTransforms._
+import typer.Inliner
+import ast.tpd.Inlined
import scala.language.implicitConversions
import printing.Formatting._
@@ -148,8 +150,16 @@ object Decorators {
}
}
- implicit def sourcePos(pos: Position)(implicit ctx: Context): SourcePosition =
- ctx.source.atPos(pos)
+ implicit def sourcePos(pos: Position)(implicit ctx: Context): SourcePosition = {
+ def recur(inlineds: Stream[Inlined], pos: Position): SourcePosition = inlineds match {
+ case inlined #:: rest =>
+ Inliner.sourceFile(inlined).atPos(pos)
+ .withOuter(recur(rest, inlined.call.pos))
+ case empty =>
+ ctx.source.atPos(pos)
+ }
+ recur(Inliner.enclosingInlineds, pos)
+ }
implicit class StringInterpolators(val sc: StringContext) extends AnyVal {