summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2007-08-30 16:46:28 +0000
committerMartin Odersky <odersky@gmail.com>2007-08-30 16:46:28 +0000
commit97946f9d60d289beee2f980c2b3efe984db23a38 (patch)
treeafd036350bd2010b0dadd727be19138ec4ea2eb9
parent71ba470de369e42fc935e4101aedc066c9e0c4d6 (diff)
downloadscala-97946f9d60d289beee2f980c2b3efe984db23a38.tar.gz
scala-97946f9d60d289beee2f980c2b3efe984db23a38.tar.bz2
scala-97946f9d60d289beee2f980c2b3efe984db23a38.zip
fixed ticket 17 (unboxing 2d-arrays)
-rw-r--r--src/library/scala/runtime/BoxedAnyArray.scala12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/library/scala/runtime/BoxedAnyArray.scala b/src/library/scala/runtime/BoxedAnyArray.scala
index a03ed39053..316c085aa1 100644
--- a/src/library/scala/runtime/BoxedAnyArray.scala
+++ b/src/library/scala/runtime/BoxedAnyArray.scala
@@ -154,11 +154,21 @@ final class BoxedAnyArray(val length: Int) extends BoxedArray {
i += 1
}
unboxed = newvalue;
- } else if (elemClass == boxed.getClass().getComponentType()) {
+ } else if (elemClass == classOf[AnyRef]) {
// todo: replace with ScalaRunTime.AnyRef.class
unboxed = boxed
} else {
unboxed = Platform.createArray(elemClass, length)
+ if (elemClass.isArray) {
+ var i = 0
+ while (i < length) {
+ boxed(i) match {
+ case ba: BoxedArray => boxed(i) = ba.unbox(elemClass.getComponentType())
+ case _ =>
+ }
+ i += 1
+ }
+ }
Platform.arraycopy(boxed, 0, unboxed, 0, length)
}
boxed = null