Skip to content

Commit b95a918

Browse files
committed
Unpickle a single tree
1 parent b88ade9 commit b95a918

File tree

4 files changed

+12
-16
lines changed

4 files changed

+12
-16
lines changed

compiler/src/dotty/tools/dotc/ast/tpd.scala

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -892,20 +892,16 @@ object tpd extends Trees.Instance[Type] with TypedTreeInfo {
892892

893893
/** A trait for loaders that compute trees. Currently implemented just by DottyUnpickler. */
894894
trait TreeProvider {
895-
protected def computeTrees(implicit ctx: Context): List[Tree]
895+
protected def computeTree(implicit ctx: Context): Tree
896896

897-
private[this] var myTrees: List[Tree] = null
898-
899-
/** Get trees defined by this provider. Cache them if -Yretain-trees is set. */
900-
def trees(implicit ctx: Context): List[Tree] =
901-
if (ctx.settings.YretainTrees.value) {
902-
if (myTrees == null) myTrees = computeTrees
903-
myTrees
904-
} else computeTrees
897+
private[this] var myTree: Tree = null
905898

906899
/** Get first tree defined by this provider, or EmptyTree if none exists */
907900
def tree(implicit ctx: Context): Tree =
908-
trees.headOption.getOrElse(EmptyTree)
901+
if (ctx.settings.YretainTrees.value) {
902+
if (myTree == null) myTree = computeTree
903+
myTree
904+
} else computeTree
909905

910906
/** Is it possible that the tree to load contains a definition of or reference to `id`? */
911907
def mightContain(id: String)(implicit ctx: Context) = true

compiler/src/dotty/tools/dotc/core/tasty/DottyUnpickler.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ class DottyUnpickler(bytes: Array[Byte]) extends ClassfileParser.Embedded with t
5050
new TreeSectionUnpickler(posUnpicklerOpt)
5151
}
5252

53-
protected def computeTrees(implicit ctx: Context) = treeUnpickler.unpickle()
53+
protected def computeTree(implicit ctx: Context) = treeUnpickler.unpickle()
5454

5555
private[this] var ids: Array[String] = null
5656

compiler/src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,12 +79,12 @@ class TreeUnpickler(reader: TastyReader,
7979
rdr.indexStats(reader.endAddr)
8080
}
8181

82-
/** The unpickled trees */
83-
def unpickle()(implicit ctx: Context): List[Tree] = {
82+
/** The unpickled tree */
83+
def unpickle()(implicit ctx: Context): Tree = {
8484
assert(roots != null, "unpickle without previous enterTopLevel")
8585
val rdr = new TreeReader(reader)
86-
if (rdr.isTopLevel) rdr.readTopLevel()
87-
else rdr.readTerm() :: Nil
86+
if (rdr.isTopLevel) rdr.readTopLevel().head
87+
else rdr.readTerm()
8888
}
8989

9090
class Completer(owner: Symbol, reader: TastyReader) extends LazyType {

compiler/src/dotty/tools/dotc/transform/Pickler.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ class Pickler extends Phase {
9999
}
100100
pickling.println("************* entered toplevel ***********")
101101
for ((cls, unpickler) <- unpicklers) {
102-
val unpickled = unpickler.trees
102+
val unpickled = unpickler.tree
103103
testSame(i"$unpickled%\n%", beforePickling(cls), cls)
104104
}
105105
}

0 commit comments

Comments
 (0)