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