diff options
author | Stefan Zeiger <szeiger@novocode.com> | 2016-01-27 15:56:12 +0100 |
---|---|---|
committer | Stefan Zeiger <szeiger@novocode.com> | 2016-01-27 15:56:12 +0100 |
commit | a01d8399bbe9f3c20a7e2e9ea9c38aefc2e07ff6 (patch) | |
tree | c364be3bfbf2b446b500d691da2d773ae4afb5cc /src/library | |
parent | ea154faf467ae27c221ba0dcd7235e1e55673c51 (diff) | |
download | scala-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')
-rw-r--r-- | src/library/scala/reflect/Manifest.scala | 3 |
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 } |