diff options
author | Martin Odersky <odersky@gmail.com> | 2016-10-18 00:27:56 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2016-10-18 00:27:56 +0200 |
commit | be29c982e43261873a57149371a2d75966d14802 (patch) | |
tree | e6a2d98fd4638949479f4646b6cf427e4c3a4951 /src/dotty/tools/dotc/core/tasty/PositionPickler.scala | |
parent | fc6b8fba13a4ac1823763410568a48e46e4b2192 (diff) | |
download | dotty-be29c982e43261873a57149371a2d75966d14802.tar.gz dotty-be29c982e43261873a57149371a2d75966d14802.tar.bz2 dotty-be29c982e43261873a57149371a2d75966d14802.zip |
Don't generate positions that can be reconstructed
Don't generate positions that can be reconstructed from the initial position of a tree.
Diffstat (limited to 'src/dotty/tools/dotc/core/tasty/PositionPickler.scala')
-rw-r--r-- | src/dotty/tools/dotc/core/tasty/PositionPickler.scala | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/dotty/tools/dotc/core/tasty/PositionPickler.scala b/src/dotty/tools/dotc/core/tasty/PositionPickler.scala index 64552ef27..78c15eae2 100644 --- a/src/dotty/tools/dotc/core/tasty/PositionPickler.scala +++ b/src/dotty/tools/dotc/core/tasty/PositionPickler.scala @@ -54,9 +54,16 @@ class PositionPickler(pickler: TastyPickler, addrsOfTree: tpd.Tree => List[Addr] lastIndex = index lastPos = pos } + + /** True if x's position cannot be reconstructed automatically from its initialPos + */ + def needsPosition(x: Positioned) = + x.pos.toSynthetic != x.initialPos.toSynthetic || + x.isInstanceOf[WithLazyField[_]] || // initialPos is inaccurate for trees with lazy fields + x.isInstanceOf[Trees.PackageDef[_]] // package defs might be split into several Tasty files def traverse(x: Any): Unit = x match { case x: Tree @unchecked => - if (x.pos.exists /*&& x.pos.toSynthetic != x.initialPos.toSynthetic*/) { + if (x.pos.exists && needsPosition(x)) { nextTreeAddr(x) match { case Some(addr) => //println(i"pickling $x at $addr") @@ -65,7 +72,7 @@ class PositionPickler(pickler: TastyPickler, addrsOfTree: tpd.Tree => List[Addr] //println(i"no address for $x") } } - //else println(i"skipping $x") + //else if (x.pos.exists) println(i"skipping $x") x match { case x: MemberDef @unchecked => traverse(x.symbol.annotations.map(_.tree)) case _ => |