< prev index next >

src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/codegen/ObjectCreator.java

Print this page

        

@@ -27,10 +27,11 @@
 
 import static jdk.nashorn.internal.codegen.CompilerConstants.SCOPE;
 
 import java.util.List;
 import jdk.nashorn.internal.codegen.types.Type;
+import jdk.nashorn.internal.runtime.JSType;
 import jdk.nashorn.internal.runtime.PropertyMap;
 import jdk.nashorn.internal.runtime.ScriptObject;
 
 /**
  * Base class for object creation code generation.

@@ -154,17 +155,17 @@
      */
     protected abstract void loadValue(T value, Type type);
 
     MethodEmitter loadTuple(final MethodEmitter method, final MapTuple<T> tuple, final boolean pack) {
         loadValue(tuple.value, tuple.type);
-        if (pack && codegen.useDualFields() && tuple.isPrimitive()) {
-            method.pack();
-        } else {
+        if (!codegen.useDualFields() || !tuple.isPrimitive()) {
             method.convert(Type.OBJECT);
+        } else if (pack) {
+            method.pack();
         }
         return method;
     }
 
-    MethodEmitter loadTuple(final MethodEmitter method, final MapTuple<T> tuple) {
-        return loadTuple(method, tuple, true);
+    MethodEmitter loadIndex(final MethodEmitter method, final long index) {
+        return JSType.isRepresentableAsInt(index) ? method.load((int) index) : method.load((double) index);
     }
 }
< prev index next >