src/jdk/nashorn/internal/objects/NativeArray.java

Print this page




 139                     public MethodHandle call() {
 140                         return Bootstrap.createDynamicInvoker("dyn:call", double.class,
 141                             ScriptFunction.class, Object.class, Object.class, Object.class);
 142                     }
 143                 });
 144     }
 145 
 146     private static InvokeByName getTO_LOCALE_STRING() {
 147         return Global.instance().getInvokeByName(TO_LOCALE_STRING,
 148                 new Callable<InvokeByName>() {
 149                     @Override
 150                     public InvokeByName call() {
 151                         return new InvokeByName("toLocaleString", ScriptObject.class, String.class);
 152                     }
 153                 });
 154     }
 155 
 156     // initialized by nasgen
 157     private static PropertyMap $nasgenmap$;
 158 
 159     static PropertyMap getInitialMap() {
 160         return $nasgenmap$;
 161     }
 162 
 163     /*
 164      * Constructors.
 165      */
 166     NativeArray() {
 167         this(ArrayData.initialArray());
 168     }
 169 
 170     NativeArray(final long length) {
 171         // TODO assert valid index in long before casting
 172         this(ArrayData.allocate((int) length));
 173     }
 174 
 175     NativeArray(final int[] array) {
 176         this(ArrayData.allocate(array));
 177     }
 178 
 179     NativeArray(final long[] array) {
 180         this(ArrayData.allocate(array));
 181     }
 182 


 191         arrayData.ensure(array.length - 1);
 192 
 193         for (int index = 0; index < array.length; index++) {
 194             final Object value = array[index];
 195 
 196             if (value == ScriptRuntime.EMPTY) {
 197                 arrayData = arrayData.delete(index);
 198             } else {
 199                 arrayData = arrayData.set(index, value, false);
 200             }
 201         }
 202 
 203         this.setArray(arrayData);
 204     }
 205 
 206     NativeArray(final ArrayData arrayData) {
 207         this(arrayData, Global.instance());
 208     }
 209 
 210     NativeArray(final ArrayData arrayData, final Global global) {
 211         super(global.getArrayPrototype(), getInitialMap());
 212         this.setArray(arrayData);
 213         this.setIsArray();
 214     }
 215 
 216     @Override
 217     public String getClassName() {
 218         return "Array";
 219     }
 220 
 221     @Override
 222     public Object getLength() {
 223         return getArray().length() & JSType.MAX_UINT;
 224     }
 225 
 226     /**
 227      * ECMA 15.4.5.1 [[DefineOwnProperty]] ( P, Desc, Throw )
 228      */
 229     @Override
 230     public boolean defineOwnProperty(final String key, final Object propertyDesc, final boolean reject) {
 231         final PropertyDescriptor desc = toPropertyDescriptor(Global.instance(), propertyDesc);




 139                     public MethodHandle call() {
 140                         return Bootstrap.createDynamicInvoker("dyn:call", double.class,
 141                             ScriptFunction.class, Object.class, Object.class, Object.class);
 142                     }
 143                 });
 144     }
 145 
 146     private static InvokeByName getTO_LOCALE_STRING() {
 147         return Global.instance().getInvokeByName(TO_LOCALE_STRING,
 148                 new Callable<InvokeByName>() {
 149                     @Override
 150                     public InvokeByName call() {
 151                         return new InvokeByName("toLocaleString", ScriptObject.class, String.class);
 152                     }
 153                 });
 154     }
 155 
 156     // initialized by nasgen
 157     private static PropertyMap $nasgenmap$;
 158 




 159     /*
 160      * Constructors.
 161      */
 162     NativeArray() {
 163         this(ArrayData.initialArray());
 164     }
 165 
 166     NativeArray(final long length) {
 167         // TODO assert valid index in long before casting
 168         this(ArrayData.allocate((int) length));
 169     }
 170 
 171     NativeArray(final int[] array) {
 172         this(ArrayData.allocate(array));
 173     }
 174 
 175     NativeArray(final long[] array) {
 176         this(ArrayData.allocate(array));
 177     }
 178 


 187         arrayData.ensure(array.length - 1);
 188 
 189         for (int index = 0; index < array.length; index++) {
 190             final Object value = array[index];
 191 
 192             if (value == ScriptRuntime.EMPTY) {
 193                 arrayData = arrayData.delete(index);
 194             } else {
 195                 arrayData = arrayData.set(index, value, false);
 196             }
 197         }
 198 
 199         this.setArray(arrayData);
 200     }
 201 
 202     NativeArray(final ArrayData arrayData) {
 203         this(arrayData, Global.instance());
 204     }
 205 
 206     NativeArray(final ArrayData arrayData, final Global global) {
 207         super(global.getArrayPrototype(), $nasgenmap$);
 208         this.setArray(arrayData);
 209         this.setIsArray();
 210     }
 211 
 212     @Override
 213     public String getClassName() {
 214         return "Array";
 215     }
 216 
 217     @Override
 218     public Object getLength() {
 219         return getArray().length() & JSType.MAX_UINT;
 220     }
 221 
 222     /**
 223      * ECMA 15.4.5.1 [[DefineOwnProperty]] ( P, Desc, Throw )
 224      */
 225     @Override
 226     public boolean defineOwnProperty(final String key, final Object propertyDesc, final boolean reject) {
 227         final PropertyDescriptor desc = toPropertyDescriptor(Global.instance(), propertyDesc);