diff options
author | Martin Odersky <odersky@gmail.com> | 2016-09-01 19:10:48 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2016-10-02 16:11:21 +0200 |
commit | 617be516b261524c2f0762de10f2bde376043ad7 (patch) | |
tree | 093df00ecbb02bfe5b06b2040fad953a613b4f20 /src/dotty/tools/dotc/core | |
parent | faba2b7999bf73bf10116b391efbdd751054ead0 (diff) | |
download | dotty-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.scala | 8 | ||||
-rw-r--r-- | src/dotty/tools/dotc/core/Decorators.scala | 14 |
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 { |