Skip to content

Commit 71598c6

Browse files
committed
WIP Fix further examples
Questionable fix.
1 parent 450d0c4 commit 71598c6

File tree

4 files changed

+35
-2
lines changed

4 files changed

+35
-2
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -597,7 +597,7 @@ class SpaceEngine(implicit ctx: Context) extends SpaceLogic {
597597
case tp: RefinedType =>
598598
recur(tp.parent)
599599
case tp: TypeRef =>
600-
recur(tp.prefix) && !(tp.classSymbol.is(AbstractFinal))
600+
(tp.prefix.stripTypeVar == defn.NothingType || recur(tp.prefix)) && !(tp.classSymbol.is(AbstractFinal))
601601
case _ =>
602602
true
603603
}

tests/patmat/i4880.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ abstract class ZipArchive(path: String) extends AbstractFile {
77
}
88

99
object Test {
10-
def foo(file: AbstractFile) = file match {
10+
def foo(file: AbstractFile) = file match {
1111
case ze: ZipArchive#Entry =>
1212
}
1313
}

tests/patmat/i4880a.scala

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
sealed abstract class AbstractFile
2+
class PlainFile(path: String) extends AbstractFile
3+
class VirtualFile(name: String) extends AbstractFile
4+
abstract class ZipArchive(path: String) extends AbstractFile {
5+
sealed abstract class Entry(name: String) extends VirtualFile(name)
6+
class DirEntry(path: String) extends Entry(path)
7+
}
8+
9+
object Test {
10+
def foo(file: AbstractFile) = file match {
11+
case a: PlainFile =>
12+
case b: ZipArchive =>
13+
case c1: ZipArchive#Entry =>
14+
case c1: ZipArchive#DirEntry =>
15+
case c: VirtualFile =>
16+
}
17+
}

tests/patmat/i4880b.scala

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
sealed abstract class AbstractFile
2+
class PlainFile(path: String) extends AbstractFile
3+
class VirtualFile(name: String) extends AbstractFile
4+
abstract class ZipArchive(path: String) extends AbstractFile {
5+
sealed abstract class Entry(name: String) extends VirtualFile(name)
6+
class DirEntry(path: String) extends Entry(path)
7+
}
8+
9+
object Test {
10+
def foo(file: AbstractFile) = file match {
11+
case a: PlainFile =>
12+
case b: ZipArchive =>
13+
case c1: ZipArchive#Entry =>
14+
case c: VirtualFile =>
15+
}
16+
}

0 commit comments

Comments
 (0)