aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2015-04-30 15:52:58 +0200
committerMartin Odersky <odersky@gmail.com>2015-04-30 15:52:58 +0200
commit10a5f9198f03ae5b8dc54f1113f98da585c4e81a (patch)
tree5a1cb4bc7e0df01f3b117db216e6dec75f964526 /src
parent9e2dd75a8c229239b59a75fe6f9ddf201946032e (diff)
downloaddotty-10a5f9198f03ae5b8dc54f1113f98da585c4e81a.tar.gz
dotty-10a5f9198f03ae5b8dc54f1113f98da585c4e81a.tar.bz2
dotty-10a5f9198f03ae5b8dc54f1113f98da585c4e81a.zip
Force TASTY trees read by unpickler in FromTasty
We want to ensure that the whole tree is read at phase frontend. To achieve this, we run an empty traverser over the tree.
Diffstat (limited to 'src')
-rw-r--r--src/dotty/tools/dotc/FromTasty.scala6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/dotty/tools/dotc/FromTasty.scala b/src/dotty/tools/dotc/FromTasty.scala
index 3d3ae01c1..37f6933bf 100644
--- a/src/dotty/tools/dotc/FromTasty.scala
+++ b/src/dotty/tools/dotc/FromTasty.scala
@@ -15,6 +15,7 @@ import util._
import Decorators._
import dotty.tools.dotc.transform.Pickler
import pickling.DottyUnpickler
+import ast.tpd._
/** Compiler for TASTY files.
* Usage:
@@ -57,6 +58,10 @@ object FromTasty extends Driver {
override def toString = s"class file $className"
}
+ object force extends TreeTraverser {
+ def traverse(tree: Tree)(implicit ctx: Context): Unit = traverseChildren(tree)
+ }
+
class ReadTastyTreesFromClasses extends FrontEnd {
override def runOn(units: List[CompilationUnit])(implicit ctx: Context): List[CompilationUnit] =
units.map(readTASTY)
@@ -80,6 +85,7 @@ object FromTasty extends Driver {
val (List(unpickled), source) = unpickler.body(readPositions = true)
val unit1 = new CompilationUnit(source)
unit1.tpdTree = unpickled
+ force.traverse(unit1.tpdTree)
unit1
case _ =>
cannotUnpickle(s"its class file ${info.classfile} does not have a TASTY attribute")