It turns out our cleverness trying to make this fast defeated us. Doing the simple thing turns out to be faster on both IE and FF for all reasonable values I can measure. Review by: bobv (postmortem) git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@1684 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/super/com/google/gwt/dev/jjs/intrinsic/com/google/gwt/lang/Array.java b/dev/core/super/com/google/gwt/dev/jjs/intrinsic/com/google/gwt/lang/Array.java index 1581836..e9c0eb5 100644 --- a/dev/core/super/com/google/gwt/dev/jjs/intrinsic/com/google/gwt/lang/Array.java +++ b/dev/core/super/com/google/gwt/dev/jjs/intrinsic/com/google/gwt/lang/Array.java
@@ -32,8 +32,8 @@ static final int ZERO_SEED_TYPE = 1; /** - * Stores the prototype for java.lang.Object so that arrays can get their - * polymorphic methods via expando. + * Stores the prototype Array so that arrays can get their polymorphic methods + * via expando. */ private static Array protoTypeArray; @@ -155,17 +155,13 @@ * @return the new JSON array */ private static native Array createFromSeed(int seedType, int length) /*-{ - var seedArrays = [[null], [0], [false]]; - var blankArray = seedArrays[seedType]; - - while (blankArray.length < length) { - // Doubles each iteration. - blankArray = blankArray.concat(blankArray); + var seedArray = [null, 0, false]; + var value = seedArray[seedType]; + var array = new Array(length); + for (var i = 0; i < length; ++i) { + array[i] = value; } - - // Remove the excess. - blankArray.length = length; - return blankArray; + return array; }-*/; private static Array initDims(Class arrayClasses[], int[] typeIdExprs,