Skip to content

Commit 5d70c58

Browse files
committed
Merge pull request #45 from DarkDimius/noSharedTrees
Get rid of SharedTree
2 parents 172f480 + fa4ea90 commit 5d70c58

File tree

7 files changed

+4
-44
lines changed

7 files changed

+4
-44
lines changed

src/dotty/tools/dotc/ast/CheckTrees.scala

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -251,8 +251,6 @@ object CheckTrees {
251251
check(annot.symbol.owner.isSubClass(defn.AnnotationClass))
252252
check(arg.isValueType || arg.isValue)
253253
case EmptyTree =>
254-
case SharedTree(shared) =>
255-
check(shared.isType || shared.isTerm)
256254
}
257255
}
258256

src/dotty/tools/dotc/ast/Trees.scala

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -776,15 +776,6 @@ object Trees {
776776
def genericEmptyValDef[T >: Untyped]: ValDef[T] = theEmptyValDef.asInstanceOf[ValDef[T]]
777777
def genericEmptyTree[T >: Untyped]: Thicket[T] = theEmptyTree.asInstanceOf[Thicket[T]]
778778

779-
/** A tree that can be shared without its position
780-
* polluting containing trees. Accumulators and tranformers
781-
* memoize results of shared subtrees
782-
*/
783-
case class SharedTree[-T >: Untyped](shared: Tree[T]) extends ProxyTree[T] {
784-
type ThisTree[-T >: Untyped] = SharedTree[T]
785-
def forwardTo: Tree[T] = shared
786-
}
787-
788779
def flatten[T >: Untyped](trees: List[Tree[T]]): List[Tree[T]] = {
789780
var buf: ListBuffer[Tree[T]] = null
790781
var xs = trees
@@ -871,7 +862,6 @@ object Trees {
871862
type Import = Trees.Import[T]
872863
type PackageDef = Trees.PackageDef[T]
873864
type Annotated = Trees.Annotated[T]
874-
type SharedTree = Trees.SharedTree[T]
875865
type Thicket = Trees.Thicket[T]
876866

877867
val EmptyTree: Thicket = genericEmptyTree
@@ -1081,18 +1071,13 @@ object Trees {
10811071
case tree: Annotated if (annot eq tree.annot) && (arg eq tree.arg) => tree
10821072
case _ => finalize(tree, untpd.Annotated(annot, arg))
10831073
}
1084-
def SharedTree(tree: Tree, shared: Tree): SharedTree = tree match {
1085-
case tree: SharedTree if (shared eq tree.shared) => tree
1086-
case _ => finalize(tree, untpd.SharedTree(shared))
1087-
}
10881074
def Thicket(tree: Tree, trees: List[Tree]): Thicket = tree match {
10891075
case tree: Thicket if (trees eq tree.trees) => tree
10901076
case _ => finalize(tree, untpd.Thicket(trees))
10911077
}
10921078
}
10931079

10941080
abstract class TreeTransformer(val cpy: TreeCopier = inst.cpy) {
1095-
var sharedMemo: Map[SharedTree, SharedTree] = Map()
10961081

10971082
def transform(tree: Tree)(implicit ctx: Context): Tree = tree match {
10981083
case Ident(name) =>
@@ -1178,14 +1163,6 @@ object Trees {
11781163
case Thicket(trees) =>
11791164
val trees1 = transform(trees)
11801165
if (trees1 eq trees) tree else Thicket(trees1)
1181-
case tree @ SharedTree(shared) =>
1182-
sharedMemo get tree match {
1183-
case Some(tree1) => tree1
1184-
case None =>
1185-
val tree1 = cpy.SharedTree(tree, transform(shared))
1186-
sharedMemo = sharedMemo.updated(tree, tree1)
1187-
tree1
1188-
}
11891166
}
11901167
def transformStats(trees: List[Tree])(implicit ctx: Context): List[Tree] =
11911168
transform(trees)
@@ -1198,7 +1175,6 @@ object Trees {
11981175
}
11991176

12001177
abstract class TreeAccumulator[X] extends ((X, Tree) => X) {
1201-
var sharedMemo: Map[SharedTree, X] = Map()
12021178
def apply(x: X, tree: Tree): X
12031179
def apply(x: X, trees: Traversable[Tree]): X = (x /: trees)(apply)
12041180
def foldOver(x: X, tree: Tree): X = tree match {
@@ -1284,14 +1260,6 @@ object Trees {
12841260
this(this(x, annot), arg)
12851261
case Thicket(ts) =>
12861262
this(x, ts)
1287-
case tree @ SharedTree(shared) =>
1288-
sharedMemo get tree match {
1289-
case Some(x1) => x1
1290-
case None =>
1291-
val x1 = this(x, shared)
1292-
sharedMemo = sharedMemo.updated(tree, x1)
1293-
x1
1294-
}
12951263
}
12961264
}
12971265

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

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -300,17 +300,14 @@ object tpd extends Trees.Instance[Type] with TypedTreeInfo {
300300
}
301301

302302
def Import(expr: Tree, selectors: List[untpd.Tree])(implicit ctx: Context): Import =
303-
untpd.Import(expr, selectors).withType(ctx.newImportSymbol(SharedTree(expr)).termRef).checked
303+
untpd.Import(expr, selectors).withType(ctx.newImportSymbol(expr).termRef).checked
304304

305305
def PackageDef(pid: RefTree, stats: List[Tree])(implicit ctx: Context): PackageDef =
306306
untpd.PackageDef(pid, stats).withType(pid.symbol.namedType).checked
307307

308308
def Annotated(annot: Tree, arg: Tree)(implicit ctx: Context): Annotated =
309309
untpd.Annotated(annot, arg).withType(AnnotatedType(Annotation(annot), arg.tpe)).checked
310310

311-
def SharedTree(tree: Tree)(implicit ctx: Context): SharedTree =
312-
Trees.SharedTree(tree).withType(tree.tpe)
313-
314311
// ------ Making references ------------------------------------------------------
315312

316313
/** A tree representing the same reference as the given type */

src/dotty/tools/dotc/ast/untpd.scala

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,6 @@ object untpd extends Trees.Instance[Untyped] with TreeInfo[Untyped] {
107107
def Import(expr: Tree, selectors: List[untpd.Tree]): Import = new Import(expr, selectors)
108108
def PackageDef(pid: RefTree, stats: List[Tree]): PackageDef = new PackageDef(pid, stats)
109109
def Annotated(annot: Tree, arg: Tree): Annotated = new Annotated(annot, arg)
110-
def SharedTree(shared: Tree): SharedTree = new SharedTree(shared)
111110

112111
// ------ Additional creation methods for untyped only -----------------
113112

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import Annotations._
1919
import util.Positions._
2020
import StdNames._
2121
import NameOps._
22-
import ast.tpd.{TreeMapper, SharedTree}
22+
import ast.tpd.{TreeMapper, Tree}
2323
import Denotations.{ Denotation, SingleDenotation, MultiDenotation }
2424
import collection.mutable
2525
import io.AbstractFile
@@ -216,7 +216,7 @@ trait Symbols { this: Context =>
216216
newSymbol(cls, nme.localDummyName(cls), EmptyFlags, NoType)
217217

218218
/** Create an import symbol pointing back to given qualifier `expr`. */
219-
def newImportSymbol(expr: SharedTree, coord: Coord = NoCoord) =
219+
def newImportSymbol(expr: Tree, coord: Coord = NoCoord) =
220220
newSymbol(NoSymbol, nme.IMPORT, EmptyFlags, ImportType(expr), coord = coord)
221221

222222
/** Create a class constructor symbol for given class `cls`. */

src/dotty/tools/dotc/printing/RefinedPrinter.scala

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -331,8 +331,6 @@ class RefinedPrinter(_ctx: Context) extends PlainPrinter(_ctx) {
331331
toTextLocal(arg) ~~ annotText(annot)
332332
case EmptyTree =>
333333
"<empty>"
334-
case SharedTree(shared) =>
335-
toText(shared)
336334
case TypedSplice(t) =>
337335
toText(t)
338336
case ModuleDef(mods, name, impl) =>

src/dotty/tools/dotc/typer/Namer.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,7 @@ class Namer { typer: Typer =>
373373
case imp: Import =>
374374
try {
375375
val expr1 = typedAheadExpr(imp.expr, AnySelectionProto)
376-
ImportType(tpd.SharedTree(expr1))
376+
ImportType(expr1)
377377
} catch {
378378
case ex: CyclicReference =>
379379
typr.println(s"error while completing ${imp.expr}")

0 commit comments

Comments
 (0)