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