Skip to content

Commit 77e9052

Browse files
committed
Change Space intersect so that the fallback for extractors matches the fallback for type spaces
1 parent d39bf9a commit 77e9052

File tree

2 files changed

+12
-8
lines changed

2 files changed

+12
-8
lines changed

compiler/src/dotty/tools/dotc/transform/patmat/Space.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -212,14 +212,14 @@ trait SpaceLogic {
212212
if (isSubType(tp2, tp1)) b
213213
else if (canDecompose(tp1)) tryDecompose1(tp1)
214214
else if (isSubType(tp1, tp2)) a // problematic corner case: inheriting a case class
215-
else Empty
215+
else intersectUnrelatedAtomicTypes(tp1, tp2)
216216
case (Prod(tp1, fun, ss), Typ(tp2, _)) =>
217217
if (isSubType(tp1, tp2)) a
218218
else if (canDecompose(tp2)) tryDecompose2(tp2)
219219
else if (isSubType(tp2, tp1)) a // problematic corner case: inheriting a case class
220-
else Empty
220+
else intersectUnrelatedAtomicTypes(tp1, tp2)
221221
case (Prod(tp1, fun1, ss1), Prod(tp2, fun2, ss2)) =>
222-
if (!isSameUnapply(fun1, fun2)) Empty
222+
if (!isSameUnapply(fun1, fun2)) intersectUnrelatedAtomicTypes(tp1, tp2)
223223
else if (ss1.zip(ss2).exists(p => simplify(intersect(p._1, p._2)) == Empty)) Empty
224224
else Prod(tp1, fun1, ss1.zip(ss2).map((intersect _).tupled))
225225
}

tests/patmat/i12805-fallout.scala

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,15 @@ abstract class Tree[-T >: Untyped] {
1616
}
1717
}
1818

19-
case class Ident[-T >: Untyped]() extends Tree[T]
20-
case class DefDef[-T >: Untyped]() extends Tree[T]
19+
case class Ident[-T >: Untyped]() extends Tree[T]
20+
case class DefDef[-T >: Untyped]() extends Tree[T]
21+
case class Inlined[-T >: Untyped]() extends Tree[T]
22+
case class CaseDef[-T >: Untyped]() extends Tree[T]
2123

2224
def test[T >: Untyped](tree: Tree[T], tp: Type) = tree.withType(tp) match {
23-
case Ident() => 1
24-
case DefDef() => 2
25-
case _ => 3
25+
case Ident() => 1
26+
case DefDef() => 2
27+
case _: Inlined[_] => 3
28+
case CaseDef() => 4
29+
case _ => 5
2630
}

0 commit comments

Comments
 (0)