nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/arrays/IntArrayData.java
changeset 26886 18c744ab4df2
parent 26768 751b0f427090
child 27098 2875b30458d3
equal deleted inserted replaced
26786:f0c5e4b732da 26886:18c744ab4df2
   103         return elementType == int.class ? getContinuousElementSetter(SET_ELEM, elementType) : null;
   103         return elementType == int.class ? getContinuousElementSetter(SET_ELEM, elementType) : null;
   104     }
   104     }
   105 
   105 
   106     @Override
   106     @Override
   107     public ArrayData copy() {
   107     public ArrayData copy() {
   108         return new IntArrayData(array.clone(), (int) length());
   108         return new IntArrayData(array.clone(), (int)length);
   109     }
   109     }
   110 
   110 
   111     @Override
   111     @Override
   112     public Object asArrayOfType(final Class<?> componentType) {
   112     public Object asArrayOfType(final Class<?> componentType) {
   113         if (componentType == int.class) {
   113         if (componentType == int.class) {
   114             return array.length == length() ? array.clone() : Arrays.copyOf(array, (int) length());
   114             return array.length == length ? array.clone() : Arrays.copyOf(array, (int)length);
   115         }
   115         }
   116         return super.asArrayOfType(componentType);
   116         return super.asArrayOfType(componentType);
   117     }
   117     }
   118 
   118 
   119     private Object[] toObjectArray() {
   119     private Object[] toObjectArray() {
   181         System.arraycopy(array, by, array, 0, array.length - by);
   181         System.arraycopy(array, by, array, 0, array.length - by);
   182     }
   182     }
   183 
   183 
   184     @Override
   184     @Override
   185     public ArrayData shiftRight(final int by) {
   185     public ArrayData shiftRight(final int by) {
   186         final ArrayData newData = ensure(by + length() - 1);
   186         final ArrayData newData = ensure(by + length - 1);
   187         if (newData != this) {
   187         if (newData != this) {
   188             newData.shiftRight(by);
   188             newData.shiftRight(by);
   189             return newData;
   189             return newData;
   190         }
   190         }
   191         System.arraycopy(array, 0, array, by, array.length - by);
   191         System.arraycopy(array, 0, array, by, array.length - by);
   227     }
   227     }
   228 
   228 
   229     @Override
   229     @Override
   230     public ArrayData set(final int index, final int value, final boolean strict) {
   230     public ArrayData set(final int index, final int value, final boolean strict) {
   231         array[index] = value;
   231         array[index] = value;
   232         setLength(Math.max(index + 1, length()));
   232         setLength(Math.max(index + 1, length));
   233 
   233 
   234         return this;
   234         return this;
   235     }
   235     }
   236 
   236 
   237     @Override
   237     @Override
   238     public ArrayData set(final int index, final long value, final boolean strict) {
   238     public ArrayData set(final int index, final long value, final boolean strict) {
   239         if (JSType.isRepresentableAsInt(value)) {
   239         if (JSType.isRepresentableAsInt(value)) {
   240             array[index] = JSType.toInt32(value);
   240             array[index] = JSType.toInt32(value);
   241             setLength(Math.max(index + 1, length()));
   241             setLength(Math.max(index + 1, length));
   242             return this;
   242             return this;
   243         }
   243         }
   244 
   244 
   245         return convert(Long.class).set(index, value, strict);
   245         return convert(Long.class).set(index, value, strict);
   246     }
   246     }
   247 
   247 
   248     @Override
   248     @Override
   249     public ArrayData set(final int index, final double value, final boolean strict) {
   249     public ArrayData set(final int index, final double value, final boolean strict) {
   250         if (JSType.isRepresentableAsInt(value)) {
   250         if (JSType.isRepresentableAsInt(value)) {
   251             array[index] = (int)(long)value;
   251             array[index] = (int)(long)value;
   252             setLength(Math.max(index + 1, length()));
   252             setLength(Math.max(index + 1, length));
   253             return this;
   253             return this;
   254         }
   254         }
   255 
   255 
   256         return convert(Double.class).set(index, value, strict);
   256         return convert(Double.class).set(index, value, strict);
   257     }
   257     }
   296         return array[index];
   296         return array[index];
   297     }
   297     }
   298 
   298 
   299     @Override
   299     @Override
   300     public boolean has(final int index) {
   300     public boolean has(final int index) {
   301         return 0 <= index && index < length();
   301         return 0 <= index && index < length;
   302     }
   302     }
   303 
   303 
   304     @Override
   304     @Override
   305     public ArrayData delete(final int index) {
   305     public ArrayData delete(final int index) {
   306         return new DeletedRangeArrayFilter(this, index, index);
   306         return new DeletedRangeArrayFilter(this, index, index);
   311         return new DeletedRangeArrayFilter(this, fromIndex, toIndex);
   311         return new DeletedRangeArrayFilter(this, fromIndex, toIndex);
   312     }
   312     }
   313 
   313 
   314     @Override
   314     @Override
   315     public Object pop() {
   315     public Object pop() {
   316         if (length() == 0) {
   316         if (length == 0) {
   317             return ScriptRuntime.UNDEFINED;
   317             return ScriptRuntime.UNDEFINED;
   318         }
   318         }
   319 
   319 
   320         final int newLength = (int) length() - 1;
   320         final int newLength = (int)length - 1;
   321         final int elem = array[newLength];
   321         final int elem = array[newLength];
   322         array[newLength] = 0;
   322         array[newLength] = 0;
   323         setLength(newLength);
   323         setLength(newLength);
   324 
   324 
   325         return elem;
   325         return elem;
   326     }
   326     }
   327 
   327 
   328     @Override
   328     @Override
   329     public ArrayData slice(final long from, final long to) {
   329     public ArrayData slice(final long from, final long to) {
   330         final long start     = from < 0 ? from + length() : from;
   330         final long start     = from < 0 ? from + length : from;
   331         final long newLength = to - start;
   331         final long newLength = to - start;
   332 
   332 
   333         return new IntArrayData(Arrays.copyOfRange(array, (int)from, (int)to), (int)newLength);
   333         return new IntArrayData(Arrays.copyOfRange(array, (int)from, (int)to), (int)newLength);
   334     }
   334     }
   335 
   335 
   336     @Override
   336     @Override
   337     public final ArrayData push(final boolean strict, final int item) {
   337     public final ArrayData push(final boolean strict, final int item) {
   338         final long      length = length();
   338         final long      len     = length;
   339         final ArrayData newData = ensure(length);
   339         final ArrayData newData = ensure(len);
   340         if (newData == this) {
   340         if (newData == this) {
   341             array[(int)length] = item;
   341             array[(int)len] = item;
   342             return this;
   342             return this;
   343         }
   343         }
   344         return newData.set((int)length, item, strict);
   344         return newData.set((int)len, item, strict);
   345     }
   345     }
   346 
   346 
   347     @Override
   347     @Override
   348     public ArrayData fastSplice(final int start, final int removed, final int added) throws UnsupportedOperationException {
   348     public ArrayData fastSplice(final int start, final int removed, final int added) throws UnsupportedOperationException {
   349         final long oldLength = length();
   349         final long oldLength = length;
   350         final long newLength = oldLength - removed + added;
   350         final long newLength = oldLength - removed + added;
   351         if (newLength > SparseArrayData.MAX_DENSE_LENGTH && newLength > array.length) {
   351         if (newLength > SparseArrayData.MAX_DENSE_LENGTH && newLength > array.length) {
   352             throw new UnsupportedOperationException();
   352             throw new UnsupportedOperationException();
   353         }
   353         }
   354         final ArrayData returnValue = removed == 0 ?
   354         final ArrayData returnValue = removed == 0 ?