Skip to content

Commit 4f0775e

Browse files
committed
Refactoring: Move stuff from DottyUnpickler to TreeProvider
... so that it can be shared with SourcefileLoader in the future.
1 parent 9832cf1 commit 4f0775e

File tree

5 files changed

+19
-18
lines changed

5 files changed

+19
-18
lines changed

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

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -873,8 +873,22 @@ object tpd extends Trees.Instance[Type] with TypedTreeInfo {
873873
def tpes: List[Type] = xs map (_.tpe)
874874
}
875875

876+
/** A trait for loaders that compute trees. Common base trait for DottyUnpickler and SymbolLoader */
876877
trait TreeProvider {
877-
def getTree(implicit ctx: Context): Tree
878+
protected def computeTrees(implicit ctx: Context): List[Tree]
879+
880+
private[this] var myTrees: List[Tree] = null
881+
882+
/** Get trees defined by this provider. Cache them if -Yretain-trees is set. */
883+
def trees(implicit ctx: Context): List[Tree] =
884+
if (ctx.settings.YretainTrees.value) {
885+
if (myTrees == null) myTrees = computeTrees
886+
myTrees
887+
} else computeTrees
888+
889+
/** Get first tree defined by this provider, or EmptyTree if none exists */
890+
def tree(implicit ctx: Context): Tree =
891+
trees.headOption.getOrElse(EmptyTree)
878892
}
879893

880894
// convert a numeric with a toXXX method

compiler/src/dotty/tools/dotc/core/Symbols.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -631,7 +631,7 @@ object Symbols {
631631
case _ =>
632632
denot.ensureCompleted()
633633
myTree match {
634-
case fn: TreeProvider => myTree = fn.getTree(ctx)
634+
case fn: TreeProvider => myTree = fn.tree
635635
case _ =>
636636
}
637637
myTree.asInstanceOf[Tree]

compiler/src/dotty/tools/dotc/core/quoted/PickledQuotes.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ object PickledQuotes {
9696
private def unpickle(bytes: Array[Byte], splices: Seq[Any])(implicit ctx: Context): Tree = {
9797
val unpickler = new TastyUnpickler(bytes, splices)
9898
unpickler.enter(roots = Set(defn.RootPackage))
99-
val tree = unpickler.body.head
99+
val tree = unpickler.tree
100100
if (pickling ne noPrinter) {
101101
println(i"**** unpickled quote for \n${tree.show}")
102102
new TastyPrinter(bytes).printContents()

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

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

53-
/** Only used if `-Yretain-trees` is set. */
54-
private[this] var myBody: List[Tree] = _
55-
56-
/** The unpickled trees */
57-
def body(implicit ctx: Context): List[Tree] = {
58-
def computeBody() = treeUnpickler.unpickle()
59-
if (ctx.settings.YretainTrees.value) {
60-
if (myBody == null)
61-
myBody = computeBody()
62-
myBody
63-
} else computeBody()
64-
}
65-
66-
def getTree(implicit ctx: Context): Tree = body.headOption.getOrElse(tpd.EmptyTree)
53+
protected def computeTrees(implicit ctx: Context) = treeUnpickler.unpickle()
6754
}

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

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

0 commit comments

Comments
 (0)