diff options
author | Paul Phillips <paulp@improving.org> | 2010-01-16 03:54:39 +0000 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2010-01-16 03:54:39 +0000 |
commit | 36ef60e68c03bc1c7fd2e910ae7d70d4ec32d3bf (patch) | |
tree | d663145af9c6e9f02bed79fbcd83549234c8727c /src/library | |
parent | 74c615c83567c930ce371833ff4b275312a4540f (diff) | |
download | scala-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.scala | 8 | ||||
-rw-r--r-- | src/library/scala/collection/mutable/WrappedArray.scala | 4 | ||||
-rw-r--r-- | src/library/scala/runtime/ArrayRuntime.java | 16 | ||||
-rw-r--r-- | src/library/scala/runtime/ScalaRunTime.scala | 14 |
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 ... |