diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2014-02-12 14:41:36 +0100 |
---|---|---|
committer | Adriaan Moors <adriaan.moors@typesafe.com> | 2014-02-12 20:54:47 -0800 |
commit | c956a27c3278b99d45676c268955a9e58a1ed15c (patch) | |
tree | 0c30690c97b32232398f0ae36fa059ccc835d84d /test/files | |
parent | b4e1a308f81d48b72ba90b7a8594759f27e1d8f3 (diff) | |
download | scala-c956a27c3278b99d45676c268955a9e58a1ed15c.tar.gz scala-c956a27c3278b99d45676c268955a9e58a1ed15c.tar.bz2 scala-c956a27c3278b99d45676c268955a9e58a1ed15c.zip |
SI-5900 Fix pattern inference regression
This commit does not close SI-5900. It only addresses a regression
in 2.11 prereleases caused by SI-7886.
The fix for SI-7886 was incomplete (as shown by the last commit)
and incorrect (as shown by the regression in pos/t5900a.scala and
the fact it ended up inferring type parameters.)
I believe that the key to fixing this problem will be unifying
the inference of case class constructor patterns and extractor
patterns.
I've explored that idea:
https://gist.github.com/retronym/7704153
https://github.com/retronym/scala/compare/ticket/5900
But didn't quite get there.
Diffstat (limited to 'test/files')
-rw-r--r-- | test/files/neg/t4818.check | 2 | ||||
-rw-r--r-- | test/files/neg/t5189.check | 2 | ||||
-rw-r--r-- | test/files/neg/t6680a.flags | 1 | ||||
-rw-r--r-- | test/files/neg/t6829.check | 12 | ||||
-rw-r--r-- | test/files/neg/t7886.check | 6 | ||||
-rw-r--r-- | test/files/neg/t7886.scala | 22 | ||||
-rw-r--r-- | test/files/pos/pattern-typing.scala | 29 | ||||
-rw-r--r-- | test/files/pos/t5900a.scala | 9 |
8 files changed, 18 insertions, 65 deletions
diff --git a/test/files/neg/t4818.check b/test/files/neg/t4818.check index 8a2c024b30..a5e15e456b 100644 --- a/test/files/neg/t4818.check +++ b/test/files/neg/t4818.check @@ -1,6 +1,6 @@ t4818.scala:4: error: type mismatch; found : Int(5) - required: A + required: Nothing def f(x: Any) = x match { case Fn(f) => f(5) } ^ one error found diff --git a/test/files/neg/t5189.check b/test/files/neg/t5189.check index aecc1d11c4..4885de99cd 100644 --- a/test/files/neg/t5189.check +++ b/test/files/neg/t5189.check @@ -1,5 +1,5 @@ t5189.scala:3: error: type mismatch; - found : T => U + found : Nothing => Any required: Any => Any def f(x: Any): Any => Any = x match { case Foo(bar) => bar } ^ diff --git a/test/files/neg/t6680a.flags b/test/files/neg/t6680a.flags new file mode 100644 index 0000000000..19243266d1 --- /dev/null +++ b/test/files/neg/t6680a.flags @@ -0,0 +1 @@ +-Xstrict-inference
\ No newline at end of file diff --git a/test/files/neg/t6829.check b/test/files/neg/t6829.check index a0b43e3b52..914a1c9260 100644 --- a/test/files/neg/t6829.check +++ b/test/files/neg/t6829.check @@ -16,32 +16,32 @@ t6829.scala:49: error: not found: value nextState val (s,a,s2) = (state,actions(agent),nextState) ^ t6829.scala:50: error: type mismatch; - found : s.type (with underlying type T1) + found : s.type (with underlying type Any) required: _53.State where val _53: G val r = rewards(agent).r(s,a,s2) ^ t6829.scala:50: error: type mismatch; - found : a.type (with underlying type T2) + found : a.type (with underlying type Any) required: _53.Action where val _53: G val r = rewards(agent).r(s,a,s2) ^ t6829.scala:50: error: type mismatch; - found : s2.type (with underlying type T3) + found : s2.type (with underlying type Any) required: _53.State where val _53: G val r = rewards(agent).r(s,a,s2) ^ t6829.scala:51: error: type mismatch; - found : s.type (with underlying type T1) + found : s.type (with underlying type Any) required: _50.State agent.learn(s,a,s2,r): G#Agent ^ t6829.scala:51: error: type mismatch; - found : a.type (with underlying type T2) + found : a.type (with underlying type Any) required: _50.Action agent.learn(s,a,s2,r): G#Agent ^ t6829.scala:51: error: type mismatch; - found : s2.type (with underlying type T3) + found : s2.type (with underlying type Any) required: _50.State agent.learn(s,a,s2,r): G#Agent ^ diff --git a/test/files/neg/t7886.check b/test/files/neg/t7886.check deleted file mode 100644 index 338eee9708..0000000000 --- a/test/files/neg/t7886.check +++ /dev/null @@ -1,6 +0,0 @@ -t7886.scala:10: error: type mismatch; - found : Contra[A] - required: Contra[Any] - case Unravel(m, msg) => g(m) - ^ -one error found diff --git a/test/files/neg/t7886.scala b/test/files/neg/t7886.scala deleted file mode 100644 index 55d80a0a43..0000000000 --- a/test/files/neg/t7886.scala +++ /dev/null @@ -1,22 +0,0 @@ -trait Covariant[+A] -trait Contra[-A] { def accept(p: A): Unit } -trait Invariant[A] extends Covariant[A] with Contra[A] - -case class Unravel[A](m: Contra[A], msg: A) - -object Test extends Covariant[Any] { - def g(m: Contra[Any]): Unit = m accept 5 - def f(x: Any): Unit = x match { - case Unravel(m, msg) => g(m) - case _ => - } - def main(args: Array[String]) { - f(Unravel[String](new Contra[String] { def accept(x: String) = x.length }, "")) - } -} -// java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String -// at Test$$anon$1.accept(a.scala:18) -// at Test$.g(a.scala:13) -// at Test$.f(a.scala:15) -// at Test$.main(a.scala:18) -// at Test.main(a.scala) diff --git a/test/files/pos/pattern-typing.scala b/test/files/pos/pattern-typing.scala deleted file mode 100644 index 7286cc38af..0000000000 --- a/test/files/pos/pattern-typing.scala +++ /dev/null @@ -1,29 +0,0 @@ -import scala.language.higherKinds - -trait Bound[B] - -package p1 { - case class Sub[B <: Bound[B]](p: B) - object Test { - def g[A](x: Bound[A]) = () - def f(x: Any) = x match { case Sub(p) => g(p) } - } -} - -package p2 { - trait Traversable[+A] { def head: A = ??? } - trait Seq[+A] extends Traversable[A] { def length: Int = ??? } - - case class SubHK[B <: Bound[B], CC[X] <: Traversable[X]](xs: CC[B]) - class MyBound extends Bound[MyBound] - class MySeq extends Seq[MyBound] - - object Test { - def g[B](x: Bound[B]) = () - - def f1(x: Any) = x match { case SubHK(xs) => xs } - def f2[B <: Bound[B], CC[X] <: Traversable[X]](sub: SubHK[B, CC]): CC[B] = sub match { case SubHK(xs) => xs } - def f3 = g(f1(SubHK(new MySeq)).head) - def f4 = g(f2(SubHK(new MySeq)).head) - } -} diff --git a/test/files/pos/t5900a.scala b/test/files/pos/t5900a.scala new file mode 100644 index 0000000000..cb02f67fb2 --- /dev/null +++ b/test/files/pos/t5900a.scala @@ -0,0 +1,9 @@ +case class Transition[S](x: S) + +object C + +object Test { + (??? : Any) match { + case Transition(C) => + } +} |