Skip to content

Commit f28c5e3

Browse files
committed
Drop AndTypeTree
1 parent 9f87f7b commit f28c5e3

21 files changed

+31
-653
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ object DesugarEnums {
154154
parentTypes.head match {
155155
case parent: RefTree if parent.name == enumClass.name =>
156156
// need a widen method to compute correct type parameters for enum base class
157-
val widenParamType = (appliedEnumRef /: parentTypes.tail)(AndTypeTree)
157+
val widenParamType = (appliedEnumRef /: parentTypes.tail)(makeAndType)
158158
val widenParam = makeSyntheticParameter(tpt = widenParamType)
159159
val widenDef = DefDef(
160160
name = s"${cdef.name}$$to$$${enumClass.name}".toTermName,
@@ -164,7 +164,7 @@ object DesugarEnums {
164164
rhs = Ident(widenParam.name))
165165
(TypeTree(), widenDef :: Nil)
166166
case _ =>
167-
(parentTypes.reduceLeft(AndTypeTree), Nil)
167+
(parentTypes.reduceLeft(makeAndType), Nil)
168168
}
169169
}
170170

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,6 @@ trait TreeInfo[T >: Untyped <: Type] { self: Trees.Instance[T] =>
166166

167167
/** can this type be a type pattern? */
168168
def mayBeTypePat(tree: Tree): Boolean = unsplice(tree) match {
169-
case AndTypeTree(tpt1, tpt2) => mayBeTypePat(tpt1) || mayBeTypePat(tpt2)
170169
case RefinedTypeTree(tpt, refinements) => mayBeTypePat(tpt) || refinements.exists(_.isInstanceOf[Bind])
171170
case AppliedTypeTree(tpt, args) => mayBeTypePat(tpt) || args.exists(_.isInstanceOf[Bind])
172171
case Select(tpt, _) => mayBeTypePat(tpt)

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

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -626,12 +626,6 @@ object Trees {
626626
type ThisTree[-T >: Untyped] = SingletonTypeTree[T]
627627
}
628628

629-
/** left & right */
630-
case class AndTypeTree[-T >: Untyped] private[ast] (left: Tree[T], right: Tree[T])(implicit @constructorOnly src: SourceFile)
631-
extends TypTree[T] {
632-
type ThisTree[-T >: Untyped] = AndTypeTree[T]
633-
}
634-
635629
/** tpt { refinements } */
636630
case class RefinedTypeTree[-T >: Untyped] private[ast] (tpt: Tree[T], refinements: List[Tree[T]])(implicit @constructorOnly src: SourceFile)
637631
extends ProxyTree[T] with TypTree[T] {
@@ -928,7 +922,6 @@ object Trees {
928922
type Inlined = Trees.Inlined[T]
929923
type TypeTree = Trees.TypeTree[T]
930924
type SingletonTypeTree = Trees.SingletonTypeTree[T]
931-
type AndTypeTree = Trees.AndTypeTree[T]
932925
type RefinedTypeTree = Trees.RefinedTypeTree[T]
933926
type AppliedTypeTree = Trees.AppliedTypeTree[T]
934927
type LambdaTypeTree = Trees.LambdaTypeTree[T]
@@ -1095,10 +1088,6 @@ object Trees {
10951088
case tree: SingletonTypeTree if (ref eq tree.ref) => tree
10961089
case _ => finalize(tree, untpd.SingletonTypeTree(ref)(sourceFile(tree)))
10971090
}
1098-
def AndTypeTree(tree: Tree)(left: Tree, right: Tree)(implicit ctx: Context): AndTypeTree = tree match {
1099-
case tree: AndTypeTree if (left eq tree.left) && (right eq tree.right) => tree
1100-
case _ => finalize(tree, untpd.AndTypeTree(left, right)(sourceFile(tree)))
1101-
}
11021091
def RefinedTypeTree(tree: Tree)(tpt: Tree, refinements: List[Tree])(implicit ctx: Context): RefinedTypeTree = tree match {
11031092
case tree: RefinedTypeTree if (tpt eq tree.tpt) && (refinements eq tree.refinements) => tree
11041093
case _ => finalize(tree, untpd.RefinedTypeTree(tpt, refinements)(sourceFile(tree)))
@@ -1260,8 +1249,6 @@ object Trees {
12601249
tree
12611250
case SingletonTypeTree(ref) =>
12621251
cpy.SingletonTypeTree(tree)(transform(ref))
1263-
case AndTypeTree(left, right) =>
1264-
cpy.AndTypeTree(tree)(transform(left), transform(right))
12651252
case RefinedTypeTree(tpt, refinements) =>
12661253
cpy.RefinedTypeTree(tree)(transform(tpt), transformSub(refinements))
12671254
case AppliedTypeTree(tpt, args) =>
@@ -1386,8 +1373,6 @@ object Trees {
13861373
x
13871374
case SingletonTypeTree(ref) =>
13881375
this(x, ref)
1389-
case AndTypeTree(left, right) =>
1390-
this(this(x, left), right)
13911376
case RefinedTypeTree(tpt, refinements) =>
13921377
this(this(x, tpt), refinements)
13931378
case AppliedTypeTree(tpt, args) =>

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

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -161,9 +161,6 @@ object tpd extends Trees.Instance[Type] with TypedTreeInfo {
161161
def SingletonTypeTree(ref: Tree)(implicit ctx: Context): SingletonTypeTree =
162162
ta.assignType(untpd.SingletonTypeTree(ref), ref)
163163

164-
def AndTypeTree(left: Tree, right: Tree)(implicit ctx: Context): AndTypeTree =
165-
ta.assignType(untpd.AndTypeTree(left, right), left, right)
166-
167164
def RefinedTypeTree(parent: Tree, refinements: List[Tree], refineCls: ClassSymbol)(implicit ctx: Context): Tree =
168165
ta.assignType(untpd.RefinedTypeTree(parent, refinements), parent, refinements, refineCls)
169166

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,6 @@ object untpd extends Trees.Instance[Untyped] with UntypedTreeInfo {
309309
def Inlined(call: tpd.Tree, bindings: List[MemberDef], expansion: Tree)(implicit src: SourceFile): Inlined = new Inlined(call, bindings, expansion)
310310
def TypeTree()(implicit src: SourceFile): TypeTree = new TypeTree()
311311
def SingletonTypeTree(ref: Tree)(implicit src: SourceFile): SingletonTypeTree = new SingletonTypeTree(ref)
312-
def AndTypeTree(left: Tree, right: Tree)(implicit src: SourceFile): AndTypeTree = new AndTypeTree(left, right)
313312
def RefinedTypeTree(tpt: Tree, refinements: List[Tree])(implicit src: SourceFile): RefinedTypeTree = new RefinedTypeTree(tpt, refinements)
314313
def AppliedTypeTree(tpt: Tree, args: List[Tree])(implicit src: SourceFile): AppliedTypeTree = new AppliedTypeTree(tpt, args)
315314
def LambdaTypeTree(tparams: List[TypeDef], body: Tree)(implicit src: SourceFile): LambdaTypeTree = new LambdaTypeTree(tparams, body)
@@ -402,6 +401,9 @@ object untpd extends Trees.Instance[Untyped] with UntypedTreeInfo {
402401
case _ => Tuple(ts)
403402
}
404403

404+
def makeAndType(left: Tree, right: Tree)(implicit ctx: Context): AppliedTypeTree =
405+
AppliedTypeTree(ref(defn.andType.typeRef), left :: right :: Nil)
406+
405407
def makeParameter(pname: TermName, tpe: Tree, mods: Modifiers = EmptyModifiers)(implicit ctx: Context): ValDef =
406408
ValDef(pname, tpe, EmptyTree).withMods(mods | Param)
407409

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,6 @@ Standard-Section: "ASTs" TopLevelStat*
106106
LAMBDAtpt Length TypeParam* body_Term
107107
TYPEBOUNDStpt Length low_Term high_Term?
108108
ANNOTATEDtpt Length underlying_Term fullAnnotation_Term
109-
ANDtpt Length left_Term right_Term
110109
MATCHtpt Length bound_Term? sel_Term CaseDef*
111110
BYNAMEtpt underlying_Term
112111
SHAREDterm term_ASTRef
@@ -418,7 +417,6 @@ object TastyFormat {
418417
final val TYPEBOUNDS = 163
419418
final val TYPEBOUNDStpt = 164
420419
final val ANDtype = 165
421-
final val ANDtpt = 166
422420
final val ORtype = 167
423421
final val POLYtype = 169
424422
final val TYPELAMBDAtype = 170
@@ -515,7 +513,6 @@ object TastyFormat {
515513
| LAMBDAtpt
516514
| TYPEBOUNDStpt
517515
| ANNOTATEDtpt
518-
| ANDtpt
519516
| BYNAMEtpt
520517
| MATCHtpt
521518
| BIND => true
@@ -644,7 +641,6 @@ object TastyFormat {
644641
case TYPEBOUNDStpt => "TYPEBOUNDStpt"
645642
case TYPEALIAS => "TYPEALIAS"
646643
case ANDtype => "ANDtype"
647-
case ANDtpt => "ANDtpt"
648644
case ORtype => "ORtype"
649645
case BYNAMEtype => "BYNAMEtype"
650646
case BYNAMEtpt => "BYNAMEtpt"

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

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -559,9 +559,6 @@ class TreePickler(pickler: TastyPickler) {
559559
case AppliedTypeTree(tycon, args) =>
560560
writeByte(APPLIEDtpt)
561561
withLength { pickleTree(tycon); args.foreach(pickleTree) }
562-
case AndTypeTree(tp1, tp2) =>
563-
writeByte(ANDtpt)
564-
withLength { pickleTree(tp1); pickleTree(tp2) }
565562
case MatchTypeTree(bound, selector, cases) =>
566563
writeByte(MATCHtpt)
567564
withLength {

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

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1175,12 +1175,11 @@ class TreeUnpickler(reader: TastyReader,
11751175
// types. This came up in #137 of collection strawman.
11761176
val tycon = readTpt()
11771177
val args = until(end)(readTpt())
1178-
untpd.AppliedTypeTree(tycon, args).withType(tycon.tpe.safeAppliedTo(args.tpes))
1179-
case ANDtpt =>
1180-
val tpt1 = readTpt()
1181-
val tpt2 = readTpt()
1182-
// FIXME: We need to do this instead of "AndType(tpt1, tpt2)" to avoid self-type cyclic reference in tasty_tools
1183-
untpd.AndTypeTree(tpt1, tpt2).withType(AndType(tpt1.tpe, tpt2.tpe))
1178+
val ownType =
1179+
if (tycon.symbol == defn.andType) AndType(args(0).tpe, args(1).tpe)
1180+
else if (tycon.symbol == defn.orType) OrType(args(0).tpe, args(1).tpe)
1181+
else tycon.tpe.safeAppliedTo(args.tpes)
1182+
untpd.AppliedTypeTree(tycon, args).withType(ownType)
11841183
case ANNOTATEDtpt =>
11851184
Annotated(readTpt(), readTerm())
11861185
case LAMBDAtpt =>

compiler/src/dotty/tools/dotc/parsing/JavaParsers.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -428,7 +428,7 @@ object JavaParsers {
428428
}
429429
val ts = buf.toList
430430
if (ts.tail.isEmpty) ts.head
431-
else ts.reduce(AndTypeTree(_,_))
431+
else ts.reduce(makeAndType(_,_))
432432
}
433433

434434
def formalParams(): List[ValDef] = {

compiler/src/dotty/tools/dotc/parsing/Parsers.scala

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -501,13 +501,7 @@ object Parsers {
501501
opStack = opStack.tail
502502
recur {
503503
atSpan(opInfo.operator.span union opInfo.operand.span union top.span) {
504-
val op = opInfo.operator
505-
val l = opInfo.operand
506-
val r = top
507-
if (isType && !op.isBackquoted && op.name == tpnme.raw.AMP) {
508-
AndTypeTree(l, r)
509-
} else
510-
InfixOp(l, op, r)
504+
InfixOp(opInfo.operand, opInfo.operator, top)
511505
}
512506
}
513507
}
@@ -909,7 +903,7 @@ object Parsers {
909903
if (ctx.settings.strict.value)
910904
deprecationWarning(DeprecatedWithOperator())
911905
in.nextToken()
912-
AndTypeTree(t, withType())
906+
makeAndType(t, withType())
913907
}
914908
else t
915909

0 commit comments

Comments
 (0)