summaryrefslogtreecommitdiff
path: root/src/library/scala/reflect/Manifest.scala
diff options
context:
space:
mode:
authorEugene Burmako <xeno.by@gmail.com>2012-12-27 23:53:46 +0100
committerEugene Burmako <xeno.by@gmail.com>2012-12-28 00:11:52 +0100
commit45ef0514e97ff618ce1d68f9c81b5024fa793af1 (patch)
treec195363c00aa880a09f0afa238c361fd03e282d5 /src/library/scala/reflect/Manifest.scala
parent186e3bf4027a8c2b9bf0550f1aacff5ee4be2313 (diff)
downloadscala-45ef0514e97ff618ce1d68f9c81b5024fa793af1.tar.gz
scala-45ef0514e97ff618ce1d68f9c81b5024fa793af1.tar.bz2
scala-45ef0514e97ff618ce1d68f9c81b5024fa793af1.zip
a few performance improvements for toArray
First of all the typo I have made when migrating from manifests to tags. `repr.getClass` in `WrappedArray` should read `array.getClass`. Secondly manifests for Any, Object/AnyRef, AnyVal, Null and Nothing now have their `newArray` methods overridden to avoid reflective overhead of array instantiation.
Diffstat (limited to 'src/library/scala/reflect/Manifest.scala')
-rw-r--r--src/library/scala/reflect/Manifest.scala5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/library/scala/reflect/Manifest.scala b/src/library/scala/reflect/Manifest.scala
index eddfe63118..f62d0ecd16 100644
--- a/src/library/scala/reflect/Manifest.scala
+++ b/src/library/scala/reflect/Manifest.scala
@@ -162,11 +162,13 @@ object ManifestFactory {
private val NullTYPE = classOf[scala.runtime.Null$]
val Any: Manifest[scala.Any] = new PhantomManifest[scala.Any](ObjectTYPE, "Any") {
+ override def newArray(len: Int) = new Array[scala.Any](len)
override def <:<(that: ClassManifest[_]): Boolean = (that eq this)
private def readResolve(): Any = Manifest.Any
}
val Object: Manifest[java.lang.Object] = new PhantomManifest[java.lang.Object](ObjectTYPE, "Object") {
+ override def newArray(len: Int) = new Array[java.lang.Object](len)
override def <:<(that: ClassManifest[_]): Boolean = (that eq this) || (that eq Any)
private def readResolve(): Any = Manifest.Object
}
@@ -174,17 +176,20 @@ object ManifestFactory {
val AnyRef: Manifest[scala.AnyRef] = Object.asInstanceOf[Manifest[scala.AnyRef]]
val AnyVal: Manifest[scala.AnyVal] = new PhantomManifest[scala.AnyVal](ObjectTYPE, "AnyVal") {
+ override def newArray(len: Int) = new Array[scala.AnyVal](len)
override def <:<(that: ClassManifest[_]): Boolean = (that eq this) || (that eq Any)
private def readResolve(): Any = Manifest.AnyVal
}
val Null: Manifest[scala.Null] = new PhantomManifest[scala.Null](NullTYPE, "Null") {
+ override def newArray(len: Int) = new Array[scala.Null](len)
override def <:<(that: ClassManifest[_]): Boolean =
(that ne null) && (that ne Nothing) && !(that <:< AnyVal)
private def readResolve(): Any = Manifest.Null
}
val Nothing: Manifest[scala.Nothing] = new PhantomManifest[scala.Nothing](NothingTYPE, "Nothing") {
+ override def newArray(len: Int) = new Array[scala.Nothing](len)
override def <:<(that: ClassManifest[_]): Boolean = (that ne null)
private def readResolve(): Any = Manifest.Nothing
}