< 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 >