diff options
author | Paul Phillips <paulp@improving.org> | 2009-07-16 18:09:44 +0000 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2009-07-16 18:09:44 +0000 |
commit | 15140852988c9ada16dae2f1e572da9e63689631 (patch) | |
tree | 4f48991d8223a8e412a0b898cd21e04a5c8ac194 | |
parent | 097993aea447cc57c4f5701c6a2e97d6953597e9 (diff) | |
download | scala-15140852988c9ada16dae2f1e572da9e63689631.tar.gz scala-15140852988c9ada16dae2f1e572da9e63689631.tar.bz2 scala-15140852988c9ada16dae2f1e572da9e63689631.zip |
Altered some invocations of Array.copy to use c...
Altered some invocations of Array.copy to use compat.Platform.arraycopy
instead, because profiling indicated a frightening amount of time being
spent in java.lang.Class.isArray (mostly stemming from ensureCapacity in
StringBuilder.)
5 files changed, 19 insertions, 18 deletions
diff --git a/src/compiler/scala/tools/nsc/ast/parser/Scanners.scala b/src/compiler/scala/tools/nsc/ast/parser/Scanners.scala index e29c055911..aa7d104ab4 100755 --- a/src/compiler/scala/tools/nsc/ast/parser/Scanners.scala +++ b/src/compiler/scala/tools/nsc/ast/parser/Scanners.scala @@ -865,7 +865,7 @@ trait Scanners { protected def enterKeyword(n: Name, tokenId: Int) { while (tokenId >= keyName.length) { val newTokName = new Array[Name](keyName.length * 2) - Array.copy(keyName, 0, newTokName, 0, newTokName.length) + compat.Platform.arraycopy(keyName, 0, newTokName, 0, newTokName.length) keyName = newTokName } keyName(tokenId) = n diff --git a/src/compiler/scala/tools/nsc/symtab/BaseTypeSeqs.scala b/src/compiler/scala/tools/nsc/symtab/BaseTypeSeqs.scala index 0516a49fff..aa86d64222 100755 --- a/src/compiler/scala/tools/nsc/symtab/BaseTypeSeqs.scala +++ b/src/compiler/scala/tools/nsc/symtab/BaseTypeSeqs.scala @@ -91,7 +91,7 @@ trait BaseTypeSeqs { private def copy(head: Type, offset: Int): BaseTypeSeq = { val arr = new Array[Type](elems.length + offset) - Array.copy(elems, 0, arr, offset, elems.length) + compat.Platform.arraycopy(elems, 0, arr, offset, elems.length) arr(0) = head new BaseTypeSeq(parents, arr) } diff --git a/src/compiler/scala/tools/nsc/symtab/Names.scala b/src/compiler/scala/tools/nsc/symtab/Names.scala index 70612c2a85..c0fc5035c9 100644 --- a/src/compiler/scala/tools/nsc/symtab/Names.scala +++ b/src/compiler/scala/tools/nsc/symtab/Names.scala @@ -74,7 +74,7 @@ class Names { while (i < len) { if (nc + i == chrs.length) { val newchrs = new Array[Char](chrs.length * 2) - Array.copy(chrs, 0, newchrs, 0, chrs.length) + compat.Platform.arraycopy(chrs, 0, newchrs, 0, chrs.length) chrs = newchrs } chrs(nc + i) = cs(offset + i) @@ -208,7 +208,7 @@ class Names { * @param offset ... */ final def copyChars(cs: Array[Char], offset: Int) = - Array.copy(chrs, index, cs, offset, len) + compat.Platform.arraycopy(chrs, index, cs, offset, len) /** return the ascii representation of this name */ diff --git a/src/compiler/scala/tools/nsc/symtab/classfile/Pickler.scala b/src/compiler/scala/tools/nsc/symtab/classfile/Pickler.scala index d8e645c52e..4a0b21a914 100644 --- a/src/compiler/scala/tools/nsc/symtab/classfile/Pickler.scala +++ b/src/compiler/scala/tools/nsc/symtab/classfile/Pickler.scala @@ -109,7 +109,7 @@ abstract class Pickler extends SubComponent { case None => if (ep == entries.length) { val entries1 = new Array[AnyRef](ep * 2) - Array.copy(entries, 0, entries1, 0, ep) + System.arraycopy(entries, 0, entries1, 0, ep) entries = entries1 } entries(ep) = entry diff --git a/src/library/scala/collection/mutable/StringBuilder.scala b/src/library/scala/collection/mutable/StringBuilder.scala index 245e867e9f..6afd4edf8d 100644 --- a/src/library/scala/collection/mutable/StringBuilder.scala +++ b/src/library/scala/collection/mutable/StringBuilder.scala @@ -13,6 +13,7 @@ package scala.collection.mutable import collection.generic._ import scala.runtime.RichString +import compat.Platform.arraycopy /** <p> * A mutable sequence of characters. This class provides an API compatible @@ -114,7 +115,7 @@ final class StringBuilder(initCapacity: Int, private val initValue: String) while (n > newsize) newsize = newsize * 2 val newar = new Array[Char](newsize) - Array.copy(array, 0, newar, 0, count) + arraycopy(array, 0, newar, 0, count) array = newar } } @@ -156,7 +157,7 @@ final class StringBuilder(initCapacity: Int, private val initValue: String) def deleteCharAt(index: Int): StringBuilder = { if (index < 0 || index >= count) throw new StringIndexOutOfBoundsException(index) - compat.Platform.arraycopy(array, index + 1, array, index, count - index - 1) + arraycopy(array, index + 1, array, index, count - index - 1) count -= 1 this } @@ -271,7 +272,7 @@ final class StringBuilder(initCapacity: Int, private val initValue: String) else { val len = sb.length ensureCapacity(count + len) - compat.Platform.arraycopy(sb.toArray, 0, array, count, len) + arraycopy(sb.toArray, 0, array, count, len) count += len this } @@ -336,7 +337,7 @@ final class StringBuilder(initCapacity: Int, private val initValue: String) */ def appendAll(x: Array[Char], offset: Int, len: Int): StringBuilder = { ensureCapacity(count + len) - compat.Platform.arraycopy(x, offset, array, count, len) + arraycopy(x, offset, array, count, len) count += len this } @@ -403,7 +404,7 @@ final class StringBuilder(initCapacity: Int, private val initValue: String) val end0 = if (end > count) count else end val len = end0 - start if (len > 0) { - compat.Platform.arraycopy(array, start + len, array, start, count - end0) + arraycopy(array, start + len, array, start, count - end0) count -= len } this @@ -433,7 +434,7 @@ final class StringBuilder(initCapacity: Int, private val initValue: String) val newCount = count + len - (end0 - start) ensureCapacity(newCount) - compat.Platform.arraycopy(array, end, array, start + len, count - end) + arraycopy(array, end, array, start + len, count - end) str.getChars(0, len, array, start) count = newCount this @@ -467,8 +468,8 @@ final class StringBuilder(initCapacity: Int, private val initValue: String) "offset " + offset + ", len " + len + ", str.length " + str.length) ensureCapacity(count + len) - compat.Platform.arraycopy(array, index, array, index + len, count - index) - compat.Platform.arraycopy(str, offset, array, index, len) + arraycopy(array, index, array, index + len, count - index) + arraycopy(str, offset, array, index, len) count += len this } @@ -515,7 +516,7 @@ final class StringBuilder(initCapacity: Int, private val initValue: String) val str = if (x == null) "null" else x val len = str.length ensureCapacity(count + len) - compat.Platform.arraycopy(array, at, array, at + len, count - at) + arraycopy(array, at, array, at + len, count - at) str.getChars(0, len, array, at) count += len this @@ -550,8 +551,8 @@ final class StringBuilder(initCapacity: Int, private val initValue: String) throw new StringIndexOutOfBoundsException(at) val len = x.length ensureCapacity(count + len) - compat.Platform.arraycopy(array, at, array, at + len, count - at) - compat.Platform.arraycopy(x, 0, array, at, len) + arraycopy(array, at, array, at + len, count - at) + arraycopy(x, 0, array, at, len) count += len this } @@ -610,7 +611,7 @@ final class StringBuilder(initCapacity: Int, private val initValue: String) if (at < 0 || at > count) throw new StringIndexOutOfBoundsException(at) ensureCapacity(count + 1) - compat.Platform.arraycopy(array, at, array, at + 1, count - at) + arraycopy(array, at, array, at + 1, count - at) array(at) = x count += 1 this @@ -868,7 +869,7 @@ object StringBuilder { // method <code>java.util.Arrays.copyOf</code> exists since 1.6 private def copyOf(src: Array[Char], newLength: Int): Array[Char] = { val dest = new Array[Char](newLength) - compat.Platform.arraycopy(src, 0, dest, 0, Math.min(src.length, newLength)) + arraycopy(src, 0, dest, 0, Math.min(src.length, newLength)) dest } |