summaryrefslogtreecommitdiff
path: root/test/files/run/t5629.scala
diff options
context:
space:
mode:
authorAleksandar Prokopec <axel22@gmail.com>2012-05-07 15:39:53 +0200
committerAleksandar Prokopec <axel22@gmail.com>2012-05-07 15:39:53 +0200
commita11a57735e73d66147f9f6166687ad7bc04feca8 (patch)
tree3b24a3ac25ab7ecc8e72c27f86c9a7783adb3c0a /test/files/run/t5629.scala
parentea25648d2737e6110b6a643b0ac4e852688a3cab (diff)
downloadscala-a11a57735e73d66147f9f6166687ad7bc04feca8.tar.gz
scala-a11a57735e73d66147f9f6166687ad7bc04feca8.tar.bz2
scala-a11a57735e73d66147f9f6166687ad7bc04feca8.zip
Fixes SI-5629.
Adds an additional argument to the unify method in specialization - `tparams`. When this parameter is set to `true`, unification is done over type parameters in poly types as well. Additionally, the unification in specialization now works over type bounds. This ensures that in the below example: trait Foo[@specialized(Int) A] { def bar[B <: A](b: B) {} } class IntFoo extends Foo[Int] { override def bar[B <: Int](b: B) {} } the method `bar` gets correctly determined as a method that needs a special override for its `bar$mcI$sp`.
Diffstat (limited to 'test/files/run/t5629.scala')
-rw-r--r--test/files/run/t5629.scala36
1 files changed, 36 insertions, 0 deletions
diff --git a/test/files/run/t5629.scala b/test/files/run/t5629.scala
new file mode 100644
index 0000000000..69feddd3a5
--- /dev/null
+++ b/test/files/run/t5629.scala
@@ -0,0 +1,36 @@
+
+
+
+import scala.{specialized => spec}
+
+
+
+trait GrandParent[@spec(Int) -A] {
+ def foo(a: A): Unit
+ def bar[B <: A](b: B): Unit = println("grandparent got: %s" format b)
+}
+
+
+trait Parent[@spec(Int) -A] extends GrandParent[A] {
+ def foo(a: A) = bar(a)
+}
+
+
+class IntChild extends Parent[Int] {
+ override def bar[B <: Int](b: B): Unit = println("int child got: %s" format b)
+}
+
+
+class AnyChild extends Parent[Any] {
+ override def bar[B <: Any](b: B): Unit = println("any child got: %s" format b)
+}
+
+
+object Test {
+
+ def main(args: Array[String]) {
+ new IntChild().foo(33)
+ new AnyChild().foo(33)
+ }
+
+}