aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/core
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
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')
-rw-r--r--src/dotty/tools/dotc/core/Contexts.scala8
-rw-r--r--src/dotty/tools/dotc/core/Decorators.scala14
2 files changed, 14 insertions, 8 deletions
diff --git a/src/dotty/tools/dotc/core/Contexts.scala b/src/dotty/tools/dotc/core/Contexts.scala
index ea0ab95e6..f2a1fe53e 100644
--- a/src/dotty/tools/dotc/core/Contexts.scala
+++ b/src/dotty/tools/dotc/core/Contexts.scala
@@ -370,12 +370,8 @@ object Contexts {
/** The current source file; will be derived from current
* compilation unit.
*/
- def source: SourceFile = {
- val file = Inliner.inlinedSource
- if (file.exists) file
- else if (compilationUnit == null) NoSource
- else compilationUnit.source
- }
+ def source: SourceFile =
+ if (compilationUnit == null) NoSource else compilationUnit.source
/** Does current phase use an erased types interpretation? */
def erasedTypes: Boolean = phase.erasedTypes
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 {