diff options
author | Martin Odersky <odersky@gmail.com> | 2016-09-04 18:18:57 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2016-10-02 16:11:21 +0200 |
commit | a81070ca1af106688b03c46d96f4266934d8cfbb (patch) | |
tree | ec4520668276b45cf083e73f2a043a224325ce71 /src/dotty/tools/dotc/core/Decorators.scala | |
parent | c1674dc461ee3f4bf38b7b895cfc9d7d6b41b53f (diff) | |
download | dotty-a81070ca1af106688b03c46d96f4266934d8cfbb.tar.gz dotty-a81070ca1af106688b03c46d96f4266934d8cfbb.tar.bz2 dotty-a81070ca1af106688b03c46d96f4266934d8cfbb.zip |
Fix some problems in Inliner
1. Don't retypecheck the arguments of an inlined epressions.
These might be very large (e.g. inlined track, or traceIndented in dotty)/
2. Keep track of inlined calls in context instead of
Inlined nodes. We only need the to compute the source file, the rest
is irrelevant.
3. In Def bindings of inlined by-name parameters, change owner of right
hand side. Otherwise we get incorrect owner chains.
4. In TreeTypeMap, treat Inlined in the same way as a block.
Diffstat (limited to 'src/dotty/tools/dotc/core/Decorators.scala')
-rw-r--r-- | src/dotty/tools/dotc/core/Decorators.scala | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/dotty/tools/dotc/core/Decorators.scala b/src/dotty/tools/dotc/core/Decorators.scala index cd4941c72..64f50173c 100644 --- a/src/dotty/tools/dotc/core/Decorators.scala +++ b/src/dotty/tools/dotc/core/Decorators.scala @@ -8,7 +8,7 @@ import util.Positions.Position, util.SourcePosition import collection.mutable.ListBuffer import dotty.tools.dotc.transform.TreeTransforms._ import typer.Inliner -import ast.tpd.Inlined +import ast.tpd.Tree import scala.language.implicitConversions import printing.Formatting._ @@ -151,9 +151,9 @@ object Decorators { } implicit def sourcePos(pos: Position)(implicit ctx: Context): SourcePosition = { - def recur(inlineds: List[Inlined], pos: Position): SourcePosition = inlineds match { - case inlined :: rest => - Inliner.sourceFile(inlined).atPos(pos).withOuter(recur(rest, inlined.call.pos)) + def recur(inlinedCalls: List[Tree], pos: Position): SourcePosition = inlinedCalls match { + case inlinedCall :: rest => + Inliner.sourceFile(inlinedCall).atPos(pos).withOuter(recur(rest, inlinedCall.pos)) case empty => ctx.source.atPos(pos) } |