From a87d40960bfdb4a683c05d3430a8874cb4dcff36 Mon Sep 17 00:00:00 2001 From: Jason Zaugg Date: Sun, 13 Jan 2013 17:42:48 +0100 Subject: SI-6968 Simple Tuple patterns aren't irrefutable Reverts part of c82ecab. The parser can't assume that a pattern `(a, b)` will match, as results of `.isInstanceOf[Tuple2]` can't be statically known until after the typer. The reopens SI-1336, SI-5589 and SI-4574, in exchange for fixing this regression SI-6968. Keeping all of those fixed will require a better definition of irrefutability, and some acrobatics to ensure safe passage to the ambiguous trees through typechecking. --- test/files/neg/t5589neg.check | 37 ------------------------------------- test/files/neg/t5589neg.scala | 6 ------ test/files/neg/t5589neg2.scala | 13 ------------- 3 files changed, 56 deletions(-) delete mode 100644 test/files/neg/t5589neg.check delete mode 100644 test/files/neg/t5589neg.scala delete mode 100644 test/files/neg/t5589neg2.scala (limited to 'test/files/neg') diff --git a/test/files/neg/t5589neg.check b/test/files/neg/t5589neg.check deleted file mode 100644 index f1dad94df3..0000000000 --- a/test/files/neg/t5589neg.check +++ /dev/null @@ -1,37 +0,0 @@ -t5589neg.scala:2: warning: `withFilter' method does not yet exist on scala.util.Either.RightProjection[Int,String], using `filter' method instead - def f5(x: Either[Int, String]) = for ((y1, y2: String) <- x.right) yield ((y1, y2)) - ^ -t5589neg.scala:2: error: constructor cannot be instantiated to expected type; - found : (T1, T2) - required: String - def f5(x: Either[Int, String]) = for ((y1, y2: String) <- x.right) yield ((y1, y2)) - ^ -t5589neg.scala:3: warning: `withFilter' method does not yet exist on scala.util.Either.RightProjection[Int,String], using `filter' method instead - def f6(x: Either[Int, String]) = for ((y1, y2: Any) <- x.right) yield ((y1, y2)) - ^ -t5589neg.scala:3: error: constructor cannot be instantiated to expected type; - found : (T1, T2) - required: String - def f6(x: Either[Int, String]) = for ((y1, y2: Any) <- x.right) yield ((y1, y2)) - ^ -t5589neg.scala:4: error: constructor cannot be instantiated to expected type; - found : (T1,) - required: (String, Int) - def f7(x: Either[Int, (String, Int)]) = for (y1 @ Tuple1(y2) <- x.right) yield ((y1, y2)) - ^ -t5589neg.scala:4: error: not found: value y2 - def f7(x: Either[Int, (String, Int)]) = for (y1 @ Tuple1(y2) <- x.right) yield ((y1, y2)) - ^ -t5589neg.scala:5: error: constructor cannot be instantiated to expected type; - found : (T1, T2, T3) - required: (String, Int) - def f8(x: Either[Int, (String, Int)]) = for ((y1, y2, y3) <- x.right) yield ((y1, y2)) - ^ -t5589neg.scala:5: error: not found: value y1 - def f8(x: Either[Int, (String, Int)]) = for ((y1, y2, y3) <- x.right) yield ((y1, y2)) - ^ -t5589neg.scala:5: error: not found: value y2 - def f8(x: Either[Int, (String, Int)]) = for ((y1, y2, y3) <- x.right) yield ((y1, y2)) - ^ -two warnings found -7 errors found diff --git a/test/files/neg/t5589neg.scala b/test/files/neg/t5589neg.scala deleted file mode 100644 index 31ff2c3693..0000000000 --- a/test/files/neg/t5589neg.scala +++ /dev/null @@ -1,6 +0,0 @@ -class A { - def f5(x: Either[Int, String]) = for ((y1, y2: String) <- x.right) yield ((y1, y2)) - def f6(x: Either[Int, String]) = for ((y1, y2: Any) <- x.right) yield ((y1, y2)) - def f7(x: Either[Int, (String, Int)]) = for (y1 @ Tuple1(y2) <- x.right) yield ((y1, y2)) - def f8(x: Either[Int, (String, Int)]) = for ((y1, y2, y3) <- x.right) yield ((y1, y2)) -} diff --git a/test/files/neg/t5589neg2.scala b/test/files/neg/t5589neg2.scala deleted file mode 100644 index b7c7ab7218..0000000000 --- a/test/files/neg/t5589neg2.scala +++ /dev/null @@ -1,13 +0,0 @@ -class A { - def f1(x: List[((((Int, (Double, (Float, String))), List[String]), List[Int]), List[Float])]) = { - for (((((a, (b, (c, d))), es), fs), gs) <- x) yield (d :: es).mkString(", ") // ok - } - - def f2(x: List[((((Int, (Double, (Float, String))), List[String]), List[Int]), List[Float])]) = { - for (((((a, (b, (c, (d1, d2)))), es), fs), gs) <- x) yield (d :: es).mkString(", ") // not ok - } - - def f3(x: List[((((Int, (Double, (Float, String))), List[String]), List[Int]), List[Float])]) = { - for (((((a, (b, _)), es), fs), gs) <- x) yield (es ::: fs).mkString(", ") // ok - } -} \ No newline at end of file -- cgit v1.2.3