summaryrefslogtreecommitdiff
path: root/src/library/scala/reflect/Manifest.scala
diff options
context:
space:
mode:
authorStefan Zeiger <szeiger@novocode.com>2016-01-27 15:56:12 +0100
committerStefan Zeiger <szeiger@novocode.com>2016-01-27 15:56:12 +0100
commita01d8399bbe9f3c20a7e2e9ea9c38aefc2e07ff6 (patch)
treec364be3bfbf2b446b500d691da2d773ae4afb5cc /src/library/scala/reflect/Manifest.scala
parentea154faf467ae27c221ba0dcd7235e1e55673c51 (diff)
downloadscala-a01d8399bbe9f3c20a7e2e9ea9c38aefc2e07ff6.tar.gz
scala-a01d8399bbe9f3c20a7e2e9ea9c38aefc2e07ff6.tar.bz2
scala-a01d8399bbe9f3c20a7e2e9ea9c38aefc2e07ff6.zip
SI-9534 Use BoxedUnit in all cases for creating Array[Unit]
Calling `wrap` or one of the higher-dimension Array factory methods on the `Manifest` for `Unit` led to an exception because it tried to use `void` as a primitive type. Unlike all other primitive Scala types, `Unit` needs to be boxed. The basic `newArray` method was not affected by this bug because it was already special-cased. The fix is to also special-case `arrayClass`.
Diffstat (limited to 'src/library/scala/reflect/Manifest.scala')
-rw-r--r--src/library/scala/reflect/Manifest.scala3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/library/scala/reflect/Manifest.scala b/src/library/scala/reflect/Manifest.scala
index 4ff49c44d0..e099853463 100644
--- a/src/library/scala/reflect/Manifest.scala
+++ b/src/library/scala/reflect/Manifest.scala
@@ -157,6 +157,9 @@ object ManifestFactory {
override def newArray(len: Int): Array[Unit] = new Array[Unit](len)
override def newWrappedArray(len: Int): WrappedArray[Unit] = new WrappedArray.ofUnit(new Array[Unit](len))
override def newArrayBuilder(): ArrayBuilder[Unit] = new ArrayBuilder.ofUnit()
+ override protected def arrayClass[T](tp: Class[_]): Class[Array[T]] =
+ if (tp eq runtimeClass) classOf[Array[scala.runtime.BoxedUnit]].asInstanceOf[Class[Array[T]]]
+ else super.arrayClass(tp)
private def readResolve(): Any = Manifest.Unit
}