summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosh Suereth <Joshua.Suereth@gmail.com>2012-09-17 05:01:22 -0700
committerJosh Suereth <Joshua.Suereth@gmail.com>2012-09-17 05:01:22 -0700
commit61c83d2903f1c68c943ea646e75b4ca32d75f991 (patch)
tree0fcf7f24c3538fe0051a83e6f6dc3b3462f86cb6
parent9bcb335b8a08edb5cd88408e3f5be3fee6a7ca88 (diff)
parent121f3a92ea86258ab8507c6a7759cd2242bebab6 (diff)
downloadscala-61c83d2903f1c68c943ea646e75b4ca32d75f991.tar.gz
scala-61c83d2903f1c68c943ea646e75b4ca32d75f991.tar.bz2
scala-61c83d2903f1c68c943ea646e75b4ca32d75f991.zip
Merge pull request #1322 from paulp/topic/emptyArray
Topic/empty array
-rw-r--r--src/compiler/scala/tools/cmd/gen/AnyVals.scala8
-rw-r--r--src/library/scala/Array.scala10
-rw-r--r--src/library/scala/Boolean.scala7
-rw-r--r--src/library/scala/Byte.scala8
-rw-r--r--src/library/scala/Char.scala8
-rw-r--r--src/library/scala/Double.scala8
-rw-r--r--src/library/scala/Float.scala8
-rw-r--r--src/library/scala/Int.scala8
-rw-r--r--src/library/scala/Long.scala8
-rw-r--r--src/library/scala/Short.scala8
-rw-r--r--src/reflect/scala/tools/nsc/io/VirtualFile.scala2
-rw-r--r--src/reflect/scala/tools/nsc/io/ZipArchive.scala2
-rw-r--r--test/files/run/empty-array.scala6
13 files changed, 16 insertions, 75 deletions
diff --git a/src/compiler/scala/tools/cmd/gen/AnyVals.scala b/src/compiler/scala/tools/cmd/gen/AnyVals.scala
index b4f5641b98..6d652ffdfe 100644
--- a/src/compiler/scala/tools/cmd/gen/AnyVals.scala
+++ b/src/compiler/scala/tools/cmd/gen/AnyVals.scala
@@ -320,13 +320,7 @@ def unbox(x: java.lang.Object): @name@ = @unboxImpl@
override def toString = "object scala.@name@"
"""
- def nonUnitCompanions = """
-/** A highly reusable empty array, useful for avoiding
- * allocations when you need one.
- *
- * @return a constant 0-length Array[@name@]
- */
-final val emptyArray = new Array[@name@](0)"""
+ def nonUnitCompanions = "" // todo
def cardinalCompanion = """
/** The smallest value representable as a @name@.
diff --git a/src/library/scala/Array.scala b/src/library/scala/Array.scala
index c61a255e3b..0b8550be37 100644
--- a/src/library/scala/Array.scala
+++ b/src/library/scala/Array.scala
@@ -48,6 +48,16 @@ class FallbackArrayBuilding {
* @version 1.0
*/
object Array extends FallbackArrayBuilding {
+ val emptyBooleanArray = new Array[Boolean](0)
+ val emptyByteArray = new Array[Byte](0)
+ val emptyCharArray = new Array[Char](0)
+ val emptyDoubleArray = new Array[Double](0)
+ val emptyFloatArray = new Array[Float](0)
+ val emptyIntArray = new Array[Int](0)
+ val emptyLongArray = new Array[Long](0)
+ val emptyShortArray = new Array[Short](0)
+ val emptyObjectArray = new Array[Object](0)
+
implicit def canBuildFrom[T](implicit t: ClassTag[T]): CanBuildFrom[Array[_], T, Array[T]] =
new CanBuildFrom[Array[_], T, Array[T]] {
def apply(from: Array[_]) = ArrayBuilder.make[T]()(t)
diff --git a/src/library/scala/Boolean.scala b/src/library/scala/Boolean.scala
index d7311078ab..440e546f19 100644
--- a/src/library/scala/Boolean.scala
+++ b/src/library/scala/Boolean.scala
@@ -135,12 +135,5 @@ object Boolean extends AnyValCompanion {
*/
override def toString = "object scala.Boolean"
-
- /** A highly reusable empty array, useful for avoiding
- * allocations when you need one.
- *
- * @return a constant 0-length Array[Boolean]
- */
- final val emptyArray = new Array[Boolean](0)
}
diff --git a/src/library/scala/Byte.scala b/src/library/scala/Byte.scala
index 02ef913fc5..df0d2c73b1 100644
--- a/src/library/scala/Byte.scala
+++ b/src/library/scala/Byte.scala
@@ -625,14 +625,6 @@ object Byte extends AnyValCompanion {
*/
override def toString = "object scala.Byte"
-
- /** A highly reusable empty array, useful for avoiding
- * allocations when you need one.
- *
- * @return a constant 0-length Array[Byte]
- */
- final val emptyArray = new Array[Byte](0)
-
/** Language mandated coercions from Byte to "wider" types.
*/
implicit def byte2short(x: Byte): Short = x.toShort
diff --git a/src/library/scala/Char.scala b/src/library/scala/Char.scala
index 5a1bf16f1d..1fa0c0d9e8 100644
--- a/src/library/scala/Char.scala
+++ b/src/library/scala/Char.scala
@@ -625,14 +625,6 @@ object Char extends AnyValCompanion {
*/
override def toString = "object scala.Char"
-
- /** A highly reusable empty array, useful for avoiding
- * allocations when you need one.
- *
- * @return a constant 0-length Array[Char]
- */
- final val emptyArray = new Array[Char](0)
-
/** Language mandated coercions from Char to "wider" types.
*/
implicit def char2int(x: Char): Int = x.toInt
diff --git a/src/library/scala/Double.scala b/src/library/scala/Double.scala
index 7bebbf9418..f058d7c26b 100644
--- a/src/library/scala/Double.scala
+++ b/src/library/scala/Double.scala
@@ -400,13 +400,5 @@ object Double extends AnyValCompanion {
/** The String representation of the scala.Double companion object.
*/
override def toString = "object scala.Double"
-
-
- /** A highly reusable empty array, useful for avoiding
- * allocations when you need one.
- *
- * @return a constant 0-length Array[Double]
- */
- final val emptyArray = new Array[Double](0)
}
diff --git a/src/library/scala/Float.scala b/src/library/scala/Float.scala
index 79ed2ac20b..d942acec23 100644
--- a/src/library/scala/Float.scala
+++ b/src/library/scala/Float.scala
@@ -401,14 +401,6 @@ object Float extends AnyValCompanion {
*/
override def toString = "object scala.Float"
-
- /** A highly reusable empty array, useful for avoiding
- * allocations when you need one.
- *
- * @return a constant 0-length Array[Float]
- */
- final val emptyArray = new Array[Float](0)
-
/** Language mandated coercions from Float to "wider" types.
*/
implicit def float2double(x: Float): Double = x.toDouble
diff --git a/src/library/scala/Int.scala b/src/library/scala/Int.scala
index fa2f9a97e7..ae36413469 100644
--- a/src/library/scala/Int.scala
+++ b/src/library/scala/Int.scala
@@ -625,14 +625,6 @@ object Int extends AnyValCompanion {
*/
override def toString = "object scala.Int"
-
- /** A highly reusable empty array, useful for avoiding
- * allocations when you need one.
- *
- * @return a constant 0-length Array[Int]
- */
- final val emptyArray = new Array[Int](0)
-
/** Language mandated coercions from Int to "wider" types.
*/
implicit def int2long(x: Int): Long = x.toLong
diff --git a/src/library/scala/Long.scala b/src/library/scala/Long.scala
index 94204e893c..4ee9383c2a 100644
--- a/src/library/scala/Long.scala
+++ b/src/library/scala/Long.scala
@@ -625,14 +625,6 @@ object Long extends AnyValCompanion {
*/
override def toString = "object scala.Long"
-
- /** A highly reusable empty array, useful for avoiding
- * allocations when you need one.
- *
- * @return a constant 0-length Array[Long]
- */
- final val emptyArray = new Array[Long](0)
-
/** Language mandated coercions from Long to "wider" types.
*/
implicit def long2float(x: Long): Float = x.toFloat
diff --git a/src/library/scala/Short.scala b/src/library/scala/Short.scala
index aef8608d2e..35c5fe3ff0 100644
--- a/src/library/scala/Short.scala
+++ b/src/library/scala/Short.scala
@@ -625,14 +625,6 @@ object Short extends AnyValCompanion {
*/
override def toString = "object scala.Short"
-
- /** A highly reusable empty array, useful for avoiding
- * allocations when you need one.
- *
- * @return a constant 0-length Array[Short]
- */
- final val emptyArray = new Array[Short](0)
-
/** Language mandated coercions from Short to "wider" types.
*/
implicit def short2int(x: Short): Int = x.toInt
diff --git a/src/reflect/scala/tools/nsc/io/VirtualFile.scala b/src/reflect/scala/tools/nsc/io/VirtualFile.scala
index 9061534edc..8a5114bfe7 100644
--- a/src/reflect/scala/tools/nsc/io/VirtualFile.scala
+++ b/src/reflect/scala/tools/nsc/io/VirtualFile.scala
@@ -33,7 +33,7 @@ class VirtualFile(val name: String, override val path: String) extends AbstractF
//########################################################################
// Private data
- private var content = Byte.emptyArray
+ private var content = Array.emptyByteArray
//########################################################################
// Public Methods
diff --git a/src/reflect/scala/tools/nsc/io/ZipArchive.scala b/src/reflect/scala/tools/nsc/io/ZipArchive.scala
index 9d9d9a46f2..49d2200895 100644
--- a/src/reflect/scala/tools/nsc/io/ZipArchive.scala
+++ b/src/reflect/scala/tools/nsc/io/ZipArchive.scala
@@ -177,7 +177,7 @@ final class URLZipArchive(val url: URL) extends ZipArchive(null) {
class FileEntry() extends Entry(zipEntry.getName) {
override val toByteArray: Array[Byte] = {
val len = zipEntry.getSize().toInt
- val arr = if (len == 0) Byte.emptyArray else new Array[Byte](len)
+ val arr = if (len == 0) Array.emptyByteArray else new Array[Byte](len)
var offset = 0
def loop() {
diff --git a/test/files/run/empty-array.scala b/test/files/run/empty-array.scala
index e56c86df5c..6e37dca37d 100644
--- a/test/files/run/empty-array.scala
+++ b/test/files/run/empty-array.scala
@@ -1,8 +1,8 @@
object Test {
def main(args: Array[String]): Unit = {
- println(Byte.emptyArray.length)
- println(Double.emptyArray.length)
- println(Boolean.emptyArray.length)
+ println(Array.emptyByteArray.length)
+ println(Array.emptyDoubleArray.length)
+ println(Array.emptyBooleanArray.length)
// okay okay okay
}
}