1.1 --- a/src/jdk/nashorn/internal/runtime/arrays/LongArrayData.java Thu Oct 17 12:38:50 2013 +0200 1.2 +++ b/src/jdk/nashorn/internal/runtime/arrays/LongArrayData.java Thu Oct 17 17:33:16 2013 +0200 1.3 @@ -92,7 +92,7 @@ 1.4 1.5 @Override 1.6 public ArrayData convert(final Class<?> type) { 1.7 - if (type == Long.class) { 1.8 + if (type == Integer.class || type == Long.class) { 1.9 return this; 1.10 } 1.11 final int length = (int) length(); 1.12 @@ -238,4 +238,32 @@ 1.13 final long newLength = to - start; 1.14 return new LongArrayData(Arrays.copyOfRange(array, (int)from, (int)to), (int)newLength); 1.15 } 1.16 + 1.17 + @Override 1.18 + public ArrayData fastSplice(final int start, final int removed, final int added) throws UnsupportedOperationException { 1.19 + final long oldLength = length(); 1.20 + final long newLength = oldLength - removed + added; 1.21 + if (newLength > SparseArrayData.MAX_DENSE_LENGTH && newLength > array.length) { 1.22 + throw new UnsupportedOperationException(); 1.23 + } 1.24 + final ArrayData returnValue = (removed == 0) ? 1.25 + EMPTY_ARRAY : new LongArrayData(Arrays.copyOfRange(array, start, start + removed), removed); 1.26 + 1.27 + if (newLength != oldLength) { 1.28 + final long[] newArray; 1.29 + 1.30 + if (newLength > array.length) { 1.31 + newArray = new long[ArrayData.nextSize((int)newLength)]; 1.32 + System.arraycopy(array, 0, newArray, 0, start); 1.33 + } else { 1.34 + newArray = array; 1.35 + } 1.36 + 1.37 + System.arraycopy(array, start + removed, newArray, start + added, (int)(oldLength - start - removed)); 1.38 + array = newArray; 1.39 + setLength(newLength); 1.40 + } 1.41 + 1.42 + return returnValue; 1.43 + } 1.44 }