diff options
author | Eugene Burmako <xeno.by@gmail.com> | 2012-09-06 21:05:17 +0200 |
---|---|---|
committer | Eugene Burmako <xeno.by@gmail.com> | 2012-09-06 23:19:20 +0200 |
commit | 6a740332c7bfd56b20993be6ecd0bf818104f56c (patch) | |
tree | 6884bd48506c9e2468d07cfcf7433121c04cfac2 /test/files/run/reify_inner2.check | |
parent | adf2d3632b07eef4fc2303aef994e66584a73f49 (diff) | |
download | scala-6a740332c7bfd56b20993be6ecd0bf818104f56c.tar.gz scala-6a740332c7bfd56b20993be6ecd0bf818104f56c.tar.bz2 scala-6a740332c7bfd56b20993be6ecd0bf818104f56c.zip |
SI-6318 fixes ClassTag.unapply for primitives
ClassTag.unapply now has overloads for primitive value classes
so that it can preserve boxiness when performing subtyping tests.
First I wanted to annotate ClassTag.unapply with a ClassTag itself,
i.e. to transform its signature from "def unapply(x: Any): Option[T]"
to "def unapply[U: ClassTag](x: U): Option[T]".
But then virtpatmat_typetag.scala exhibited a nasty problem.
When pattern matching with this unapply, patmat first infers U as something
and then tries to pattern match against this inferred type. And if U gets
inferred as an abstract type itself, bad things happen:
warning: The outer reference in this type test cannot be checked at run time.
That's why I decided to drop the ClassTag idea and go with 9 extra overloads.
Not very beautiful, but definitely robust.
Diffstat (limited to 'test/files/run/reify_inner2.check')
0 files changed, 0 insertions, 0 deletions