Skip to content

Commit 9f87f7b

Browse files
committed
Drop OrTypeTree
1 parent 5b45634 commit 9f87f7b

File tree

18 files changed

+26
-105
lines changed

18 files changed

+26
-105
lines changed

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,6 @@ trait TreeInfo[T >: Untyped <: Type] { self: Trees.Instance[T] =>
167167
/** can this type be a type pattern? */
168168
def mayBeTypePat(tree: Tree): Boolean = unsplice(tree) match {
169169
case AndTypeTree(tpt1, tpt2) => mayBeTypePat(tpt1) || mayBeTypePat(tpt2)
170-
case OrTypeTree(tpt1, tpt2) => mayBeTypePat(tpt1) || mayBeTypePat(tpt2)
171170
case RefinedTypeTree(tpt, refinements) => mayBeTypePat(tpt) || refinements.exists(_.isInstanceOf[Bind])
172171
case AppliedTypeTree(tpt, args) => mayBeTypePat(tpt) || args.exists(_.isInstanceOf[Bind])
173172
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
@@ -632,12 +632,6 @@ object Trees {
632632
type ThisTree[-T >: Untyped] = AndTypeTree[T]
633633
}
634634

635-
/** left | right */
636-
case class OrTypeTree[-T >: Untyped] private[ast] (left: Tree[T], right: Tree[T])(implicit @constructorOnly src: SourceFile)
637-
extends TypTree[T] {
638-
type ThisTree[-T >: Untyped] = OrTypeTree[T]
639-
}
640-
641635
/** tpt { refinements } */
642636
case class RefinedTypeTree[-T >: Untyped] private[ast] (tpt: Tree[T], refinements: List[Tree[T]])(implicit @constructorOnly src: SourceFile)
643637
extends ProxyTree[T] with TypTree[T] {
@@ -935,7 +929,6 @@ object Trees {
935929
type TypeTree = Trees.TypeTree[T]
936930
type SingletonTypeTree = Trees.SingletonTypeTree[T]
937931
type AndTypeTree = Trees.AndTypeTree[T]
938-
type OrTypeTree = Trees.OrTypeTree[T]
939932
type RefinedTypeTree = Trees.RefinedTypeTree[T]
940933
type AppliedTypeTree = Trees.AppliedTypeTree[T]
941934
type LambdaTypeTree = Trees.LambdaTypeTree[T]
@@ -1106,10 +1099,6 @@ object Trees {
11061099
case tree: AndTypeTree if (left eq tree.left) && (right eq tree.right) => tree
11071100
case _ => finalize(tree, untpd.AndTypeTree(left, right)(sourceFile(tree)))
11081101
}
1109-
def OrTypeTree(tree: Tree)(left: Tree, right: Tree)(implicit ctx: Context): OrTypeTree = tree match {
1110-
case tree: OrTypeTree if (left eq tree.left) && (right eq tree.right) => tree
1111-
case _ => finalize(tree, untpd.OrTypeTree(left, right)(sourceFile(tree)))
1112-
}
11131102
def RefinedTypeTree(tree: Tree)(tpt: Tree, refinements: List[Tree])(implicit ctx: Context): RefinedTypeTree = tree match {
11141103
case tree: RefinedTypeTree if (tpt eq tree.tpt) && (refinements eq tree.refinements) => tree
11151104
case _ => finalize(tree, untpd.RefinedTypeTree(tpt, refinements)(sourceFile(tree)))
@@ -1273,8 +1262,6 @@ object Trees {
12731262
cpy.SingletonTypeTree(tree)(transform(ref))
12741263
case AndTypeTree(left, right) =>
12751264
cpy.AndTypeTree(tree)(transform(left), transform(right))
1276-
case OrTypeTree(left, right) =>
1277-
cpy.OrTypeTree(tree)(transform(left), transform(right))
12781265
case RefinedTypeTree(tpt, refinements) =>
12791266
cpy.RefinedTypeTree(tree)(transform(tpt), transformSub(refinements))
12801267
case AppliedTypeTree(tpt, args) =>
@@ -1401,8 +1388,6 @@ object Trees {
14011388
this(x, ref)
14021389
case AndTypeTree(left, right) =>
14031390
this(this(x, left), right)
1404-
case OrTypeTree(left, right) =>
1405-
this(this(x, left), right)
14061391
case RefinedTypeTree(tpt, refinements) =>
14071392
this(this(x, tpt), refinements)
14081393
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
@@ -164,9 +164,6 @@ object tpd extends Trees.Instance[Type] with TypedTreeInfo {
164164
def AndTypeTree(left: Tree, right: Tree)(implicit ctx: Context): AndTypeTree =
165165
ta.assignType(untpd.AndTypeTree(left, right), left, right)
166166

167-
def OrTypeTree(left: Tree, right: Tree)(implicit ctx: Context): OrTypeTree =
168-
ta.assignType(untpd.OrTypeTree(left, right), left, right)
169-
170167
def RefinedTypeTree(parent: Tree, refinements: List[Tree], refineCls: ClassSymbol)(implicit ctx: Context): Tree =
171168
ta.assignType(untpd.RefinedTypeTree(parent, refinements), parent, refinements, refineCls)
172169

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,6 @@ object untpd extends Trees.Instance[Untyped] with UntypedTreeInfo {
310310
def TypeTree()(implicit src: SourceFile): TypeTree = new TypeTree()
311311
def SingletonTypeTree(ref: Tree)(implicit src: SourceFile): SingletonTypeTree = new SingletonTypeTree(ref)
312312
def AndTypeTree(left: Tree, right: Tree)(implicit src: SourceFile): AndTypeTree = new AndTypeTree(left, right)
313-
def OrTypeTree(left: Tree, right: Tree)(implicit src: SourceFile): OrTypeTree = new OrTypeTree(left, right)
314313
def RefinedTypeTree(tpt: Tree, refinements: List[Tree])(implicit src: SourceFile): RefinedTypeTree = new RefinedTypeTree(tpt, refinements)
315314
def AppliedTypeTree(tpt: Tree, args: List[Tree])(implicit src: SourceFile): AppliedTypeTree = new AppliedTypeTree(tpt, args)
316315
def LambdaTypeTree(tparams: List[TypeDef], body: Tree)(implicit src: SourceFile): LambdaTypeTree = new LambdaTypeTree(tparams, body)

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,6 @@ Standard-Section: "ASTs" TopLevelStat*
107107
TYPEBOUNDStpt Length low_Term high_Term?
108108
ANNOTATEDtpt Length underlying_Term fullAnnotation_Term
109109
ANDtpt Length left_Term right_Term
110-
ORtpt Length left_Term right_Term
111110
MATCHtpt Length bound_Term? sel_Term CaseDef*
112111
BYNAMEtpt underlying_Term
113112
SHAREDterm term_ASTRef
@@ -421,7 +420,6 @@ object TastyFormat {
421420
final val ANDtype = 165
422421
final val ANDtpt = 166
423422
final val ORtype = 167
424-
final val ORtpt = 168
425423
final val POLYtype = 169
426424
final val TYPELAMBDAtype = 170
427425
final val LAMBDAtpt = 171
@@ -518,7 +516,6 @@ object TastyFormat {
518516
| TYPEBOUNDStpt
519517
| ANNOTATEDtpt
520518
| ANDtpt
521-
| ORtpt
522519
| BYNAMEtpt
523520
| MATCHtpt
524521
| BIND => true
@@ -649,7 +646,6 @@ object TastyFormat {
649646
case ANDtype => "ANDtype"
650647
case ANDtpt => "ANDtpt"
651648
case ORtype => "ORtype"
652-
case ORtpt => "ORtpt"
653649
case BYNAMEtype => "BYNAMEtype"
654650
case BYNAMEtpt => "BYNAMEtpt"
655651
case POLYtype => "POLYtype"

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

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -562,9 +562,6 @@ class TreePickler(pickler: TastyPickler) {
562562
case AndTypeTree(tp1, tp2) =>
563563
writeByte(ANDtpt)
564564
withLength { pickleTree(tp1); pickleTree(tp2) }
565-
case OrTypeTree(tp1, tp2) =>
566-
writeByte(ORtpt)
567-
withLength { pickleTree(tp1); pickleTree(tp2) }
568565
case MatchTypeTree(bound, selector, cases) =>
569566
writeByte(MATCHtpt)
570567
withLength {

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1181,8 +1181,6 @@ class TreeUnpickler(reader: TastyReader,
11811181
val tpt2 = readTpt()
11821182
// FIXME: We need to do this instead of "AndType(tpt1, tpt2)" to avoid self-type cyclic reference in tasty_tools
11831183
untpd.AndTypeTree(tpt1, tpt2).withType(AndType(tpt1.tpe, tpt2.tpe))
1184-
case ORtpt =>
1185-
OrTypeTree(readTpt(), readTpt())
11861184
case ANNOTATEDtpt =>
11871185
Annotated(readTpt(), readTerm())
11881186
case LAMBDAtpt =>

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -504,9 +504,7 @@ object Parsers {
504504
val op = opInfo.operator
505505
val l = opInfo.operand
506506
val r = top
507-
if (isType && !op.isBackquoted && op.name == tpnme.raw.BAR) {
508-
OrTypeTree(l, r)
509-
} else if (isType && !op.isBackquoted && op.name == tpnme.raw.AMP) {
507+
if (isType && !op.isBackquoted && op.name == tpnme.raw.AMP) {
510508
AndTypeTree(l, r)
511509
} else
512510
InfixOp(l, op, r)

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -425,12 +425,13 @@ class RefinedPrinter(_ctx: Context) extends PlainPrinter(_ctx) {
425425
toTextLocal(ref) ~ "." ~ keywordStr("type")
426426
case AndTypeTree(l, r) =>
427427
changePrec(AndTypePrec) { toText(l) ~ " & " ~ atPrec(AndTypePrec + 1) { toText(r) } }
428-
case OrTypeTree(l, r) =>
429-
changePrec(OrTypePrec) { toText(l) ~ " | " ~ atPrec(OrTypePrec + 1) { toText(r) } }
430428
case RefinedTypeTree(tpt, refines) =>
431429
toTextLocal(tpt) ~ " " ~ blockText(refines)
432430
case AppliedTypeTree(tpt, args) =>
433-
toTextLocal(tpt) ~ "[" ~ Text(args map argText, ", ") ~ "]"
431+
if (tpt.symbol == defn.orType && args.length == 2)
432+
changePrec(OrTypePrec) { toText(args(0)) ~ " | " ~ atPrec(OrTypePrec + 1) { toText(args(1)) } }
433+
else
434+
toTextLocal(tpt) ~ "[" ~ Text(args map argText, ", ") ~ "]"
434435
case LambdaTypeTree(tparams, body) =>
435436
changePrec(GlobalPrec) {
436437
tparamsText(tparams) ~ " -> " ~ toText(body)

compiler/src/dotty/tools/dotc/tastyreflect/CoreImpl.scala

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,6 @@ trait CoreImpl extends scala.tasty.reflect.Core {
7474
type Applied = tpd.AppliedTypeTree
7575
type Annotated = tpd.Annotated
7676
type And = tpd.AndTypeTree
77-
type Or = tpd.OrTypeTree
7877
type MatchType = tpd.MatchTypeTree
7978
type ByName = tpd.ByNameTypeTree
8079
type LambdaTypeTree = tpd.LambdaTypeTree

compiler/src/dotty/tools/dotc/tastyreflect/TypeOrBoundsTreesOpsImpl.scala

Lines changed: 1 addition & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,7 @@ trait TypeOrBoundsTreesOpsImpl extends scala.tasty.reflect.TypeOrBoundsTreeOps w
5050
def annotation(implicit ctx: Contexts.Context): Term = x.annot
5151
}
5252

53-
def AndDeco(x: TypeTree.And): TypeTree.OrAPI = new TypeTree.OrAPI {
54-
def left(implicit ctx: Contexts.Context): TypeTree = x.left
55-
def right(implicit ctx: Contexts.Context): TypeTree = x.right
56-
}
57-
58-
def OrDeco(x: TypeTree.Or): TypeTree.OrAPI = new TypeTree.OrAPI {
53+
def AndDeco(x: TypeTree.And): TypeTree.AndAPI = new TypeTree.AndAPI {
5954
def left(implicit ctx: Contexts.Context): TypeTree = x.left
6055
def right(implicit ctx: Contexts.Context): TypeTree = x.right
6156
}
@@ -273,26 +268,6 @@ trait TypeOrBoundsTreesOpsImpl extends scala.tasty.reflect.TypeOrBoundsTreeOps w
273268
}
274269
}
275270

276-
object IsOr extends IsOrModule {
277-
def unapply(tpt: TypeOrBoundsTree)(implicit ctx: Context): Option[Or] = tpt match {
278-
case tpt: tpd.OrTypeTree => Some(tpt)
279-
case _ => None
280-
}
281-
}
282-
283-
object Or extends OrModule {
284-
def apply(left: TypeTree, right: TypeTree)(implicit ctx: Context): Or =
285-
tpd.OrTypeTree(left, right)
286-
287-
def copy(original: Or)(left: TypeTree, right: TypeTree)(implicit ctx: Context): Or =
288-
tpd.cpy.OrTypeTree(original)(left, right)
289-
290-
def unapply(x: TypeTree)(implicit ctx: Context): Option[(TypeTree, TypeTree)] = x match {
291-
case x: tpd.OrTypeTree => Some(x.left, x.right)
292-
case _ => None
293-
}
294-
}
295-
296271
object IsMatchType extends IsMatchTypeModule {
297272
def unapply(tpt: TypeOrBoundsTree)(implicit ctx: Context): Option[MatchType] = tpt match {
298273
case tpt: tpd.MatchTypeTree => Some(tpt)

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,6 @@ class TreeChecker extends Phase with SymTransformer {
234234
// case tree: TypeTree =>
235235
// case tree: SingletonTypeTree =>
236236
// case tree: AndTypeTree =>
237-
// case tree: OrTypeTree =>
238237
// case tree: RefinedTypeTree =>
239238
// case tree: AppliedTypeTree =>
240239
// case tree: ByNameTypeTree =>

compiler/src/dotty/tools/dotc/typer/TypeAssigner.scala

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -521,9 +521,6 @@ trait TypeAssigner {
521521
def assignType(tree: untpd.AndTypeTree, left: Tree, right: Tree)(implicit ctx: Context): AndTypeTree =
522522
tree.withType(AndType(checkNoWildcard(left).tpe, checkNoWildcard(right).tpe))
523523

524-
def assignType(tree: untpd.OrTypeTree, left: Tree, right: Tree)(implicit ctx: Context): OrTypeTree =
525-
tree.withType(OrType(checkNoWildcard(left).tpe, checkNoWildcard(right).tpe))
526-
527524
/** Assign type of RefinedType.
528525
* Refinements are typed as if they were members of refinement class `refineCls`.
529526
*/
@@ -542,9 +539,10 @@ trait TypeAssigner {
542539
def assignType(tree: untpd.AppliedTypeTree, tycon: Tree, args: List[Tree])(implicit ctx: Context): AppliedTypeTree = {
543540
assert(!hasNamedArg(args))
544541
val tparams = tycon.tpe.typeParams
545-
val ownType =
542+
var ownType =
546543
if (sameLength(tparams, args)) tycon.tpe.appliedTo(args.tpes)
547544
else wrongNumberOfTypeArgs(tycon.tpe, tparams, args, tree.sourcePos)
545+
if (tycon.symbol == defn.andType || tycon.symbol == defn.orType) ownType = ownType.dealias
548546
tree.withType(ownType)
549547
}
550548

compiler/src/dotty/tools/dotc/typer/Typer.scala

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1279,13 +1279,6 @@ class Typer extends Namer
12791279
assignType(cpy.AndTypeTree(tree)(left1, right1), left1, right1)
12801280
}
12811281

1282-
def typedOrTypeTree(tree: untpd.OrTypeTree)(implicit ctx: Context): OrTypeTree = track("typedOrTypeTree") {
1283-
val where = "in a union type"
1284-
val left1 = checkNotSingleton(checkSimpleKinded(typed(tree.left)), where)
1285-
val right1 = checkNotSingleton(checkSimpleKinded(typed(tree.right)), where)
1286-
assignType(cpy.OrTypeTree(tree)(left1, right1), left1, right1)
1287-
}
1288-
12891282
def typedRefinedTypeTree(tree: untpd.RefinedTypeTree)(implicit ctx: Context): RefinedTypeTree = track("typedRefinedTypeTree") {
12901283
val tpt1 = if (tree.tpt.isEmpty) TypeTree(defn.ObjectType) else typedAheadType(tree.tpt)
12911284
val refineClsDef = desugar.refinedTypeToClass(tpt1, tree.refinements).withSpan(tree.span)
@@ -1365,9 +1358,15 @@ class Typer extends Namer
13651358
case (tparam, _) =>
13661359
tparam.paramInfo.bounds
13671360
}
1368-
val args2 = preCheckKinds(args1, paramBounds)
1369-
// check that arguments conform to bounds is done in phase PostTyper
1370-
assignType(cpy.AppliedTypeTree(tree)(tpt1, args2), tpt1, args2)
1361+
var checkedArgs = preCheckKinds(args1, paramBounds)
1362+
// check that arguments conform to bounds is done in phase PostTyper
1363+
if (tpt1.symbol == defn.andType)
1364+
checkedArgs = checkedArgs.mapconserve(arg =>
1365+
checkSimpleKinded(checkNoWildcard(arg)))
1366+
else if (tpt1.symbol == defn.orType)
1367+
checkedArgs = checkedArgs.mapconserve(arg =>
1368+
checkNotSingleton(checkSimpleKinded(checkNoWildcard(arg)), "in a union type"))
1369+
assignType(cpy.AppliedTypeTree(tree)(tpt1, checkedArgs), tpt1, checkedArgs)
13711370
}
13721371
}
13731372

@@ -2005,7 +2004,6 @@ class Typer extends Namer
20052004
case tree: untpd.TypeTree => typedTypeTree(tree, pt)
20062005
case tree: untpd.SingletonTypeTree => typedSingletonTypeTree(tree)
20072006
case tree: untpd.AndTypeTree => typedAndTypeTree(tree)
2008-
case tree: untpd.OrTypeTree => typedOrTypeTree(tree)
20092007
case tree: untpd.RefinedTypeTree => typedRefinedTypeTree(tree)
20102008
case tree: untpd.AppliedTypeTree => typedAppliedTypeTree(tree)
20112009
case tree: untpd.LambdaTypeTree => typedLambdaTypeTree(tree)(ctx.localContext(tree, NoSymbol).setNewScope)

library/src/scala/tasty/reflect/Printers.scala

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -219,8 +219,6 @@ trait Printers
219219
this += "TypeTree.Singleton(" += ref += ")"
220220
case TypeTree.And(left, right) =>
221221
this += "TypeTree.And(" += left += ", " += right += ")"
222-
case TypeTree.Or(left, right) =>
223-
this += "TypeTree.Or(" += left += ", " += right += ")"
224222
case TypeTree.Refined(tpt, refinements) =>
225223
this += "TypeTree.Refined(" += tpt += ", " ++= refinements += ")"
226224
case TypeTree.Applied(tpt, args) =>
@@ -1423,12 +1421,12 @@ trait Printers
14231421
printTypeTree(left)
14241422
this += highlightTypeDef(" & ", color)
14251423
printTypeTree(right)
1426-
1424+
/*
14271425
case TypeTree.Or(left, right) =>
14281426
printTypeTree(left)
14291427
this += highlightTypeDef(" | ", color)
14301428
printTypeTree(right)
1431-
1429+
*/
14321430
case TypeTree.MatchType(bound, selector, cases) =>
14331431
printTypeTree(selector)
14341432
this += highlightKeyword(" match ", color)

library/src/scala/tasty/reflect/TreeUtils.scala

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,6 @@ trait TreeUtils
9494
case TypeTree.Projection(qualifier, _) => foldTypeTree(x, qualifier)
9595
case TypeTree.Singleton(ref) => foldTree(x, ref)
9696
case TypeTree.And(left, right) => foldTypeTree(foldTypeTree(x, left), right)
97-
case TypeTree.Or(left, right) => foldTypeTree(foldTypeTree(x, left), right)
9897
case TypeTree.Refined(tpt, refinements) => foldTrees(foldTypeTree(x, tpt), refinements)
9998
case TypeTree.Applied(tpt, args) => foldTypeTrees(foldTypeTree(x, tpt), args)
10099
case TypeTree.ByName(result) => foldTypeTree(x, result)
@@ -256,8 +255,6 @@ trait TreeUtils
256255
TypeTree.Applied.copy(tree)(transformTypeTree(tree.tpt), transformTypeOrBoundsTrees(tree.args))
257256
case TypeTree.IsAnd(tree) =>
258257
TypeTree.And.copy(tree)(transformTypeTree(tree.left), transformTypeTree(tree.right))
259-
case TypeTree.IsOr(tree) =>
260-
TypeTree.Or.copy(tree)(transformTypeTree(tree.left), transformTypeTree(tree.right))
261258
case TypeTree.IsMatchType(tree) =>
262259
TypeTree.MatchType.copy(tree)(tree.bound.map(b => transformTypeTree(b)), transformTypeTree(tree.selector), transformTypeCaseDefs(tree.cases))
263260
case TypeTree.IsByName(tree) =>

library/src/scala/tasty/reflect/TypeOrBoundsTreeOps.scala

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@ trait TypeOrBoundsTreeOps extends Core {
1414
implicit def RefinedDeco(x: TypeTree.Refined): TypeTree.RefinedAPI
1515
implicit def AppliedDeco(x: TypeTree.Applied): TypeTree.AppliedAPI
1616
implicit def AnnotatedDeco(x: TypeTree.Annotated): TypeTree.AnnotatedAPI
17-
implicit def AndDeco(x: TypeTree.And): TypeTree.OrAPI
18-
implicit def OrDeco(x: TypeTree.Or): TypeTree.OrAPI
17+
implicit def AndDeco(x: TypeTree.And): TypeTree.AndAPI
1918
implicit def MatchTypeTreeDeco(x: TypeTree.MatchType): TypeTree.MatchTypeAPI
2019
implicit def ByNameDeco(x: TypeTree.ByName): TypeTree.ByNameAPI
2120
implicit def LambdaTypeTreeDeco(x: TypeTree.LambdaTypeTree): TypeTree.LambdaTypeTreeAPI
@@ -208,24 +207,6 @@ trait TypeOrBoundsTreeOps extends Core {
208207
def unapply(typeOrBoundsTree: TypeOrBoundsTree)(implicit ctx: Context): Option[(TypeTree, TypeTree)]
209208
}
210209

211-
val IsOr: IsOrModule
212-
abstract class IsOrModule {
213-
/** Matches any Or and returns it */
214-
def unapply(tpt: TypeOrBoundsTree)(implicit ctx: Context): Option[Or]
215-
}
216-
217-
trait OrAPI {
218-
def left(implicit ctx: Context): TypeTree
219-
def right(implicit ctx: Context): TypeTree
220-
}
221-
222-
val Or: OrModule
223-
abstract class OrModule {
224-
def apply(left: TypeTree, right: TypeTree)(implicit ctx: Context): Or
225-
def copy(original: Or)(left: TypeTree, right: TypeTree)(implicit ctx: Context): Or
226-
def unapply(typeOrBoundsTree: TypeOrBoundsTree)(implicit ctx: Context): Option[(TypeTree, TypeTree)]
227-
}
228-
229210
val IsMatchType: IsMatchTypeModule
230211
abstract class IsMatchTypeModule {
231212
/** Matches any MatchType and returns it */

tests/neg/and-wildcard.scala

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
object Test {
2+
3+
type And[X, Y] = X & Y
4+
5+
val x: And[_, _] = ??? // error: unreducible
6+
}

0 commit comments

Comments
 (0)