File tree 5 files changed +19
-18
lines changed
compiler/src/dotty/tools/dotc
5 files changed +19
-18
lines changed Original file line number Diff line number Diff line change @@ -873,8 +873,22 @@ object tpd extends Trees.Instance[Type] with TypedTreeInfo {
873
873
def tpes : List [Type ] = xs map (_.tpe)
874
874
}
875
875
876
+ /** A trait for loaders that compute trees. Common base trait for DottyUnpickler and SymbolLoader */
876
877
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 )
878
892
}
879
893
880
894
// convert a numeric with a toXXX method
Original file line number Diff line number Diff line change @@ -631,7 +631,7 @@ object Symbols {
631
631
case _ =>
632
632
denot.ensureCompleted()
633
633
myTree match {
634
- case fn : TreeProvider => myTree = fn.getTree(ctx)
634
+ case fn : TreeProvider => myTree = fn.tree
635
635
case _ =>
636
636
}
637
637
myTree.asInstanceOf [Tree ]
Original file line number Diff line number Diff line change @@ -96,7 +96,7 @@ object PickledQuotes {
96
96
private def unpickle (bytes : Array [Byte ], splices : Seq [Any ])(implicit ctx : Context ): Tree = {
97
97
val unpickler = new TastyUnpickler (bytes, splices)
98
98
unpickler.enter(roots = Set (defn.RootPackage ))
99
- val tree = unpickler.body.head
99
+ val tree = unpickler.tree
100
100
if (pickling ne noPrinter) {
101
101
println(i " **** unpickled quote for \n ${tree.show}" )
102
102
new TastyPrinter (bytes).printContents()
Original file line number Diff line number Diff line change @@ -50,18 +50,5 @@ class DottyUnpickler(bytes: Array[Byte]) extends ClassfileParser.Embedded with t
50
50
new TreeSectionUnpickler (posUnpicklerOpt)
51
51
}
52
52
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()
67
54
}
Original file line number Diff line number Diff line change @@ -95,7 +95,7 @@ class Pickler extends Phase {
95
95
}
96
96
pickling.println(" ************* entered toplevel ***********" )
97
97
for ((cls, unpickler) <- unpicklers) {
98
- val unpickled = unpickler.body
98
+ val unpickled = unpickler.trees
99
99
testSame(i " $unpickled% \n % " , beforePickling(cls), cls)
100
100
}
101
101
}
You can’t perform that action at this time.
0 commit comments