< prev index next >
src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeUint32Array.java
Print this page
@@ -30,19 +30,21 @@
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.IntBuffer;
+import jdk.nashorn.internal.codegen.types.Type;
import jdk.nashorn.internal.objects.annotations.Attribute;
import jdk.nashorn.internal.objects.annotations.Constructor;
import jdk.nashorn.internal.objects.annotations.Function;
import jdk.nashorn.internal.objects.annotations.Property;
import jdk.nashorn.internal.objects.annotations.ScriptClass;
import jdk.nashorn.internal.objects.annotations.Where;
import jdk.nashorn.internal.runtime.JSType;
import jdk.nashorn.internal.runtime.PropertyMap;
import jdk.nashorn.internal.runtime.ScriptObject;
+import jdk.nashorn.internal.runtime.UnwarrantedOptimismException;
import jdk.nashorn.internal.runtime.arrays.ArrayData;
import jdk.nashorn.internal.runtime.arrays.TypedArrayData;
/**
* Uint32 array for TypedArray extension
@@ -76,11 +78,11 @@
}
};
private static final class Uint32ArrayData extends TypedArrayData<IntBuffer> {
- private static final MethodHandle GET_ELEM = specialCall(MethodHandles.lookup(), Uint32ArrayData.class, "getElem", long.class, int.class).methodHandle();
+ private static final MethodHandle GET_ELEM = specialCall(MethodHandles.lookup(), Uint32ArrayData.class, "getElem", double.class, int.class).methodHandle();
private static final MethodHandle SET_ELEM = specialCall(MethodHandles.lookup(), Uint32ArrayData.class, "setElem", void.class, int.class, int.class).methodHandle();
private Uint32ArrayData(final IntBuffer nb, final int start, final int end) {
super(((IntBuffer)nb.position(start).limit(end)).slice(), end - start);
}
@@ -101,18 +103,22 @@
return null;
}
return getContinuousElementGetter(getClass(), GET_ELEM, returnType, programPoint);
}
- private long getElem(final int index) {
+ private int getRawElem(final int index) {
try {
- return JSType.toUint32(nb.get(index));
+ return nb.get(index);
} catch (final IndexOutOfBoundsException e) {
throw new ClassCastException(); //force relink - this works for unoptimistic too
}
}
+ private double getElem(final int index) {
+ return JSType.toUint32(getRawElem(index));
+ }
+
private void setElem(final int index, final int elem) {
try {
if (index < nb.limit()) {
nb.put(index, elem);
}
@@ -126,46 +132,41 @@
return true;
}
@Override
public Class<?> getElementType() {
- return long.class;
+ return double.class;
}
@Override
public Class<?> getBoxedElementType() {
- return Integer.class;
+ return Double.class;
}
@Override
public int getInt(final int index) {
- return (int)getLong(index);
+ return getRawElem(index);
}
@Override
- public long getLong(final int index) {
- return getElem(index);
- }
-
- @Override
- public long getLongOptimistic(final int index, final int programPoint) {
- return getElem(index);
+ public int getIntOptimistic(final int index, final int programPoint) {
+ return JSType.toUint32Optimistic(getRawElem(index), programPoint);
}
@Override
public double getDouble(final int index) {
- return getLong(index);
+ return getElem(index);
}
@Override
public double getDoubleOptimistic(final int index, final int programPoint) {
- return getLong(index);
+ return getElem(index);
}
@Override
public Object getObject(final int index) {
- return getLong(index);
+ return getElem(index);
}
@Override
public ArrayData set(final int index, final Object value, final boolean strict) {
return set(index, JSType.toInt32(value), strict);
@@ -176,15 +177,10 @@
setElem(index, value);
return this;
}
@Override
- public ArrayData set(final int index, final long value, final boolean strict) {
- return set(index, (int)value, strict);
- }
-
- @Override
public ArrayData set(final int index, final double value, final boolean strict) {
return set(index, (int)value, strict);
}
}
< prev index next >