summaryrefslogtreecommitdiff
path: root/src/library
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2010-01-16 03:54:39 +0000
committerPaul Phillips <paulp@improving.org>2010-01-16 03:54:39 +0000
commit36ef60e68c03bc1c7fd2e910ae7d70d4ec32d3bf (patch)
treed663145af9c6e9f02bed79fbcd83549234c8727c /src/library
parent74c615c83567c930ce371833ff4b275312a4540f (diff)
downloadscala-36ef60e68c03bc1c7fd2e910ae7d70d4ec32d3bf.tar.gz
scala-36ef60e68c03bc1c7fd2e910ae7d70d4ec32d3bf.tar.bz2
scala-36ef60e68c03bc1c7fd2e910ae7d70d4ec32d3bf.zip
Exposed native Array clone() method.
Review by dragos.
Diffstat (limited to 'src/library')
-rw-r--r--src/library/scala/Array.scala8
-rw-r--r--src/library/scala/collection/mutable/WrappedArray.scala4
-rw-r--r--src/library/scala/runtime/ArrayRuntime.java16
-rw-r--r--src/library/scala/runtime/ScalaRunTime.scala14
4 files changed, 41 insertions, 1 deletions
diff --git a/src/library/scala/Array.scala b/src/library/scala/Array.scala
index fd171c5a5e..afaaed7c7c 100644
--- a/src/library/scala/Array.scala
+++ b/src/library/scala/Array.scala
@@ -538,4 +538,12 @@ final class Array[T](_length: Int) {
* <code>length <= i</code>
*/
def update(i: Int, x: T) { throw new Error() }
+
+ /** <p>
+ * Clone the Array.
+ * </p>
+ *
+ * @return A clone of the Array.
+ */
+ override def clone: Array[T] = throw new Error()
}
diff --git a/src/library/scala/collection/mutable/WrappedArray.scala b/src/library/scala/collection/mutable/WrappedArray.scala
index cedeb673e0..6652f5e40a 100644
--- a/src/library/scala/collection/mutable/WrappedArray.scala
+++ b/src/library/scala/collection/mutable/WrappedArray.scala
@@ -43,6 +43,9 @@ abstract class WrappedArray[T] extends IndexedSeq[T] with ArrayLike[T, WrappedAr
def array: Array[T]
override def stringPrefix = "WrappedArray"
+ /** Clones this object, including the underlying Array. */
+ override def clone: WrappedArray[T] = WrappedArray make array.clone()
+
/** Creates new builder for this collection ==> move to subclasses
*/
override protected[this] def newBuilder: Builder[T, WrappedArray[T]] =
@@ -50,7 +53,6 @@ abstract class WrappedArray[T] extends IndexedSeq[T] with ArrayLike[T, WrappedAr
}
object WrappedArray {
-
def make[T](x: AnyRef): WrappedArray[T] = x match {
case x: Array[AnyRef] => wrapRefArray[AnyRef](x).asInstanceOf[WrappedArray[T]]
case x: Array[Int] => wrapIntArray(x).asInstanceOf[WrappedArray[T]]
diff --git a/src/library/scala/runtime/ArrayRuntime.java b/src/library/scala/runtime/ArrayRuntime.java
new file mode 100644
index 0000000000..b382fdf8f6
--- /dev/null
+++ b/src/library/scala/runtime/ArrayRuntime.java
@@ -0,0 +1,16 @@
+package scala.runtime;
+
+/**
+ * Methods on Java arrays
+ */
+class ArrayRuntime {
+ static boolean[] cloneArray(boolean[] array) { return array.clone(); }
+ static byte[] cloneArray(byte[] array) { return array.clone(); }
+ static short[] cloneArray(short[] array) { return array.clone(); }
+ static char[] cloneArray(char[] array) { return array.clone(); }
+ static int[] cloneArray(int[] array) { return array.clone(); }
+ static long[] cloneArray(long[] array) { return array.clone(); }
+ static float[] cloneArray(float[] array) { return array.clone(); }
+ static double[] cloneArray(double[] array) { return array.clone(); }
+ static Object[] cloneArray(Object[] array) { return array.clone(); }
+}
diff --git a/src/library/scala/runtime/ScalaRunTime.scala b/src/library/scala/runtime/ScalaRunTime.scala
index ecc81c074e..2f6ffb5535 100644
--- a/src/library/scala/runtime/ScalaRunTime.scala
+++ b/src/library/scala/runtime/ScalaRunTime.scala
@@ -74,6 +74,20 @@ object ScalaRunTime {
case null => throw new NullPointerException
}
+ def array_clone(xs: AnyRef): AnyRef = xs match {
+ case x: Array[AnyRef] => ArrayRuntime.cloneArray(x)
+ case x: Array[Int] => ArrayRuntime.cloneArray(x)
+ case x: Array[Double] => ArrayRuntime.cloneArray(x)
+ case x: Array[Long] => ArrayRuntime.cloneArray(x)
+ case x: Array[Float] => ArrayRuntime.cloneArray(x)
+ case x: Array[Char] => ArrayRuntime.cloneArray(x)
+ case x: Array[Byte] => ArrayRuntime.cloneArray(x)
+ case x: Array[Short] => ArrayRuntime.cloneArray(x)
+ case x: Array[Boolean] => ArrayRuntime.cloneArray(x)
+ case x: Array[Unit] => x
+ case null => throw new NullPointerException
+ }
+
/** Convert a numeric value array to an object array.
* Needed to deal with vararg arguments of primtive types that are passed
* to a generic Java vararg parameter T ...