diff options
author | Aleksandar Prokopec <axel22@gmail.com> | 2012-05-07 15:39:53 +0200 |
---|---|---|
committer | Aleksandar Prokopec <axel22@gmail.com> | 2012-05-07 15:39:53 +0200 |
commit | a11a57735e73d66147f9f6166687ad7bc04feca8 (patch) | |
tree | 3b24a3ac25ab7ecc8e72c27f86c9a7783adb3c0a /test/files/run/t5629.scala | |
parent | ea25648d2737e6110b6a643b0ac4e852688a3cab (diff) | |
download | scala-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.scala | 36 |
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) + } + +} |