summaryrefslogtreecommitdiff
path: root/src/reflect
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2013-05-24 05:43:58 -0700
committerPaul Phillips <paulp@improving.org>2013-05-27 13:04:45 -0700
commite26f5c412a2498c23c8cc3e975208a71f8f7d558 (patch)
tree41d35674cd70aa47ec0a9faf707d2994f6c1b580 /src/reflect
parente42991f40707023d563f43bf66f3d8b9a637aa1b (diff)
downloadscala-e26f5c412a2498c23c8cc3e975208a71f8f7d558.tar.gz
scala-e26f5c412a2498c23c8cc3e975208a71f8f7d558.tar.bz2
scala-e26f5c412a2498c23c8cc3e975208a71f8f7d558.zip
SI-7088 Array crasher in erasure.
The usual business where half our pattern matches are missing half the necessary cases.
Diffstat (limited to 'src/reflect')
-rw-r--r--src/reflect/scala/reflect/internal/transform/Erasure.scala6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/reflect/scala/reflect/internal/transform/Erasure.scala b/src/reflect/scala/reflect/internal/transform/Erasure.scala
index a9a1285de3..580ada8254 100644
--- a/src/reflect/scala/reflect/internal/transform/Erasure.scala
+++ b/src/reflect/scala/reflect/internal/transform/Erasure.scala
@@ -55,9 +55,13 @@ trait Erasure {
}
}
+ /** Arrays despite their finality may turn up as refined type parents,
+ * e.g. with "tagged types" like Array[Int] with T.
+ */
protected def unboundedGenericArrayLevel(tp: Type): Int = tp match {
case GenericArray(level, core) if !(core <:< AnyRefTpe) => level
- case _ => 0
+ case RefinedType(ps, _) if ps.nonEmpty => logResult(s"Unbounded generic level for $tp is")(ps map unboundedGenericArrayLevel max)
+ case _ => 0
}
// @M #2585 when generating a java generic signature that includes