< prev index next >

src/jdk/nashorn/internal/runtime/arrays/NumberArrayData.java

Print this page




 162     @Override
 163     public ArrayData set(final int index, final Object value, final boolean strict) {
 164         if (value instanceof Double || (value != null && canWiden(value.getClass()))) {
 165             return set(index, ((Number)value).doubleValue(), strict);
 166         } else if (value == UNDEFINED) {
 167             return new UndefinedArrayFilter(this).set(index, value, strict);
 168         }
 169 
 170         final ArrayData newData = convert(value == null ? Object.class : value.getClass());
 171         return newData.set(index, value, strict);
 172     }
 173 
 174     @Override
 175     public ArrayData set(final int index, final int value, final boolean strict) {
 176         array[index] = value;
 177         setLength(Math.max(index + 1, length()));
 178         return this;
 179     }
 180 
 181     @Override
 182     public ArrayData set(final int index, final long value, final boolean strict) {
 183         array[index] = value;
 184         setLength(Math.max(index + 1, length()));
 185         return this;
 186     }
 187 
 188     @Override
 189     public ArrayData set(final int index, final double value, final boolean strict) {
 190         array[index] = value;
 191         setLength(Math.max(index + 1, length()));
 192         return this;
 193     }
 194 
 195     private static final MethodHandle HAS_GET_ELEM = specialCall(MethodHandles.lookup(), NumberArrayData.class, "getElem", double.class, int.class).methodHandle();
 196     private static final MethodHandle SET_ELEM     = specialCall(MethodHandles.lookup(), NumberArrayData.class, "setElem", void.class, int.class, double.class).methodHandle();
 197 
 198     @SuppressWarnings("unused")
 199     private double getElem(final int index) {
 200         if (has(index)) {
 201             return array[index];
 202         }
 203         throw new ClassCastException();
 204     }
 205 
 206     @SuppressWarnings("unused")
 207     private void setElem(final int index, final double elem) {
 208         if (hasRoomFor(index)) {
 209             array[index] = elem;
 210             return;
 211         }
 212         throw new ClassCastException();
 213     }
 214 
 215     @Override
 216     public MethodHandle getElementGetter(final Class<?> returnType, final int programPoint) {
 217         if (returnType == int.class || returnType == long.class) {
 218             return null;
 219         }
 220         return getContinuousElementGetter(HAS_GET_ELEM, returnType, programPoint);
 221     }
 222 
 223     @Override
 224     public MethodHandle getElementSetter(final Class<?> elementType) {
 225         return elementType.isPrimitive() ? getContinuousElementSetter(MH.asType(SET_ELEM, SET_ELEM.type().changeParameterType(2, elementType)), elementType) : null;
 226     }
 227 
 228     @Override
 229     public int getInt(final int index) {
 230         return JSType.toInt32(array[index]);
 231     }
 232 
 233     @Override
 234     public long getLong(final int index) {
 235         return (long)array[index];
 236     }
 237 
 238     @Override
 239     public double getDouble(final int index) {
 240         return array[index];
 241     }
 242 
 243     @Override
 244     public double getDoubleOptimistic(final int index, final int programPoint) {
 245         return array[index];
 246     }
 247 
 248     @Override
 249     public Object getObject(final int index) {
 250         return array[index];
 251     }
 252 
 253     @Override
 254     public boolean has(final int index) {
 255         return 0 <= index && index < length();




 162     @Override
 163     public ArrayData set(final int index, final Object value, final boolean strict) {
 164         if (value instanceof Double || (value != null && canWiden(value.getClass()))) {
 165             return set(index, ((Number)value).doubleValue(), strict);
 166         } else if (value == UNDEFINED) {
 167             return new UndefinedArrayFilter(this).set(index, value, strict);
 168         }
 169 
 170         final ArrayData newData = convert(value == null ? Object.class : value.getClass());
 171         return newData.set(index, value, strict);
 172     }
 173 
 174     @Override
 175     public ArrayData set(final int index, final int value, final boolean strict) {
 176         array[index] = value;
 177         setLength(Math.max(index + 1, length()));
 178         return this;
 179     }
 180 
 181     @Override







 182     public ArrayData set(final int index, final double value, final boolean strict) {
 183         array[index] = value;
 184         setLength(Math.max(index + 1, length()));
 185         return this;
 186     }
 187 
 188     private static final MethodHandle HAS_GET_ELEM = specialCall(MethodHandles.lookup(), NumberArrayData.class, "getElem", double.class, int.class).methodHandle();
 189     private static final MethodHandle SET_ELEM     = specialCall(MethodHandles.lookup(), NumberArrayData.class, "setElem", void.class, int.class, double.class).methodHandle();
 190 
 191     @SuppressWarnings("unused")
 192     private double getElem(final int index) {
 193         if (has(index)) {
 194             return array[index];
 195         }
 196         throw new ClassCastException();
 197     }
 198 
 199     @SuppressWarnings("unused")
 200     private void setElem(final int index, final double elem) {
 201         if (hasRoomFor(index)) {
 202             array[index] = elem;
 203             return;
 204         }
 205         throw new ClassCastException();
 206     }
 207 
 208     @Override
 209     public MethodHandle getElementGetter(final Class<?> returnType, final int programPoint) {
 210         if (returnType == int.class) {
 211             return null;
 212         }
 213         return getContinuousElementGetter(HAS_GET_ELEM, returnType, programPoint);
 214     }
 215 
 216     @Override
 217     public MethodHandle getElementSetter(final Class<?> elementType) {
 218         return elementType.isPrimitive() ? getContinuousElementSetter(MH.asType(SET_ELEM, SET_ELEM.type().changeParameterType(2, elementType)), elementType) : null;
 219     }
 220 
 221     @Override
 222     public int getInt(final int index) {
 223         return JSType.toInt32(array[index]);





 224     }
 225 
 226     @Override
 227     public double getDouble(final int index) {
 228         return array[index];
 229     }
 230 
 231     @Override
 232     public double getDoubleOptimistic(final int index, final int programPoint) {
 233         return array[index];
 234     }
 235 
 236     @Override
 237     public Object getObject(final int index) {
 238         return array[index];
 239     }
 240 
 241     @Override
 242     public boolean has(final int index) {
 243         return 0 <= index && index < length();


< prev index next >