< prev index next >
src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeUint32Array.java
Print this page
*** 30,48 ****
--- 30,50 ----
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,86 ****
}
};
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 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);
}
--- 78,88 ----
}
};
private static final class Uint32ArrayData extends TypedArrayData<IntBuffer> {
! 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,118 ****
return null;
}
return getContinuousElementGetter(getClass(), GET_ELEM, returnType, programPoint);
}
! private long getElem(final int index) {
try {
! return JSType.toUint32(nb.get(index));
} catch (final IndexOutOfBoundsException e) {
throw new ClassCastException(); //force relink - this works for unoptimistic too
}
}
private void setElem(final int index, final int elem) {
try {
if (index < nb.limit()) {
nb.put(index, elem);
}
--- 103,124 ----
return null;
}
return getContinuousElementGetter(getClass(), GET_ELEM, returnType, programPoint);
}
! private int getRawElem(final int index) {
try {
! 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,171 ****
return true;
}
@Override
public Class<?> getElementType() {
! return long.class;
}
@Override
public Class<?> getBoxedElementType() {
! return Integer.class;
}
@Override
public int getInt(final int index) {
! return (int)getLong(index);
}
@Override
! public long getLong(final int index) {
! return getElem(index);
! }
!
! @Override
! public long getLongOptimistic(final int index, final int programPoint) {
! return getElem(index);
}
@Override
public double getDouble(final int index) {
! return getLong(index);
}
@Override
public double getDoubleOptimistic(final int index, final int programPoint) {
! return getLong(index);
}
@Override
public Object getObject(final int index) {
! return getLong(index);
}
@Override
public ArrayData set(final int index, final Object value, final boolean strict) {
return set(index, JSType.toInt32(value), strict);
--- 132,172 ----
return true;
}
@Override
public Class<?> getElementType() {
! return double.class;
}
@Override
public Class<?> getBoxedElementType() {
! return Double.class;
}
@Override
public int getInt(final int index) {
! return getRawElem(index);
}
@Override
! public int getIntOptimistic(final int index, final int programPoint) {
! return JSType.toUint32Optimistic(getRawElem(index), programPoint);
}
@Override
public double getDouble(final int index) {
! return getElem(index);
}
@Override
public double getDoubleOptimistic(final int index, final int programPoint) {
! return getElem(index);
}
@Override
public Object getObject(final int 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,190 ****
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);
}
}
--- 177,186 ----
< prev index next >