summaryrefslogtreecommitdiff
path: root/test/files/neg/exhausting.scala
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2010-10-05 02:59:06 +0000
committerPaul Phillips <paulp@improving.org>2010-10-05 02:59:06 +0000
commit4afd17d6d309ba1d64979ee9078edebc5d8e035e (patch)
tree1eeeb455d8a54c95c5821649a2fec7ef321a9943 /test/files/neg/exhausting.scala
parent74a0c96db07a3bef246bcc197cbe545b2a1eeee7 (diff)
downloadscala-4afd17d6d309ba1d64979ee9078edebc5d8e035e.tar.gz
scala-4afd17d6d309ba1d64979ee9078edebc5d8e035e.tar.bz2
scala-4afd17d6d309ba1d64979ee9078edebc5d8e035e.zip
Massively simplified the exhaustiveness checker...
Massively simplified the exhaustiveness checker with no measurable loss of fidelity. I might be the only one who can be unsurprised by such a bloody diff: anyone else would rightly say "how on earth..." No review.
Diffstat (limited to 'test/files/neg/exhausting.scala')
-rw-r--r--test/files/neg/exhausting.scala40
1 files changed, 40 insertions, 0 deletions
diff --git a/test/files/neg/exhausting.scala b/test/files/neg/exhausting.scala
new file mode 100644
index 0000000000..8b1ea817e4
--- /dev/null
+++ b/test/files/neg/exhausting.scala
@@ -0,0 +1,40 @@
+object Test {
+ sealed abstract class Foo[T]
+ case object Bar1 extends Foo[Int]
+ case object Bar2 extends Foo[String]
+ case object Bar3 extends Foo[Any]
+
+ def ex1[T](xs: List[T]) = xs match {
+ case ys: List[_] => "ok"
+ }
+ def ex2[T](xx: (Foo[T], Foo[T])) = xx match {
+ case (Bar1, Bar1) => ()
+ case (_, Bar1) => ()
+ case (_, Bar3) => ()
+ case (_, Bar2) => ()
+ }
+ def ex3[T](xx: (Foo[T], Foo[T])) = xx match {
+ case (_: Foo[_], _: Foo[_]) => ()
+ }
+
+ def fail1[T](xs: List[T]) = xs match {
+ case Nil => "ok"
+ case x :: y :: Nil => "ok"
+ }
+ def fail2[T](xs: List[T]) = xs match {
+ case _ :: _ => "ok"
+ }
+ def fail3[T](x: Foo[T]) = x match {
+ case Bar1 => "ok"
+ case Bar2 => "ok"
+ }
+ def fail4[T](xx: (Foo[T], Foo[T])) = xx match {
+ case (Bar1, Bar1) => ()
+ case (Bar2, Bar3) => ()
+ case (Bar3, _) => ()
+ }
+
+ def main(args: Array[String]): Unit = {
+
+ }
+}