Home | History | Annotate | Download | only in js

Lines Matching refs:array

16 var GlobalArray = global.Array;
37 function ArraySpeciesCreate(array, length) {
39 var constructor = %ArraySpeciesConstructor(array);
48 function GetSortedArrayKeys(array, indices) {
54 var e = array[i];
55 if (!IS_UNDEFINED(e) || i in array) {
65 function SparseJoinWithSeparatorJS(array, keys, length, use_locale, separator) {
71 elements[i * 2 + 1] = ConvertToString(use_locale, array[key]);
78 function SparseJoin(array, keys, use_locale) {
82 elements[i] = ConvertToString(use_locale, array[keys[i]]);
88 function UseSparseVariant(array, length, is_array, touched) {
91 // the overall size of the array.
92 if (!is_array || length < 1000 || %HasComplexElements(array)) {
99 var estimated_elements = %EstimateNumberOfElements(array);
135 function DoJoin(array, length, is_array, separator, use_locale) {
136 if (UseSparseVariant(array, length, is_array, length)) {
137 %NormalizeElements(array);
138 var keys = GetSortedArrayKeys(array, %GetArrayKeys(array, length));
141 return SparseJoin(array, keys, use_locale);
144 array, keys, length, use_locale, separator);
150 return ConvertToString(use_locale, array[0]);
153 // Construct an array for the elements.
156 elements[i] = ConvertToString(use_locale, array[i]);
166 function Join(array, length, separator, use_locale) {
169 var is_array = IS_ARRAY(array);
172 // If the array is cyclic, return the empty string for already
174 if (StackHas(visited_arrays, array)) return '';
175 StackPush(visited_arrays, array);
180 return DoJoin(array, length, is_array, separator, use_locale);
182 // Make sure to remove the last element of the visited array no
196 // special array operations to handle sparse arrays in a sensible fashion.
197 function SparseSlice(array, start_i, del_count, len, deleted_elements) {
198 // Move deleted elements to a new array (the return value from splice).
199 var indices = %GetArrayKeys(array, start_i + del_count);
203 var current = array[i];
204 if (!IS_UNDEFINED(current) || i in array) {
213 var current = array[key];
214 if (!IS_UNDEFINED(current) || key in array) {
224 // special array operations to handle sparse arrays in a sensible fashion.
225 function SparseMove(array, start_i, del_count, len, num_additional_args) {
228 // Move data to new array.
230 // Clamp array length to 2^32-1 to avoid early RangeError.
233 var indices = %GetArrayKeys(array, len);
237 var current = array[i];
238 if (!IS_UNDEFINED(current) || i in array) {
243 var current = array[i];
244 if (!IS_UNDEFINED(current) || i in array) {
253 var current = array[key];
254 if (!IS_UNDEFINED(current) || key in array) {
258 var current = array[key];
259 if (!IS_UNDEFINED(current) || key in array) {
270 // Move contents of new_array into this array
271 %MoveArrayContents(new_array, array);
277 array[key] = new_array[key];
284 // because the receiver is not an array (so we have no choice) or because we
286 function SimpleSlice(array, start_i, del_count, len, deleted_elements) {
289 if (index in array) {
290 var current = array[index];
297 function SimpleMove(array, start_i, del_count, len, num_additional_args) {
300 // to the right position in the resulting array.
305 if (from_index in array) {
306 array[to_index] = array[from_index];
308 delete array[to_index];
315 if (from_index in array) {
316 array[to_index] = array[from_index];
318 delete array[to_index];
322 delete array[i - 1];
333 var array;
340 array = this;
342 array = TO_OBJECT(this);
343 func = array.join;
346 return %_Call(ObjectToString, array);
348 return %_Call(func, array);
352 function InnerArrayToLocaleString(array, length) {
353 return Join(array, TO_LENGTH(length), ',', true);
358 var array = TO_OBJECT(this);
359 var arrayLen = array.length;
360 return InnerArrayToLocaleString(array, arrayLen);
364 function InnerArrayJoin(separator, array, length) {
373 var e = array[0];
378 return Join(array, length, separator, false);
383 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.join");
385 var array = TO_OBJECT(this);
386 var length = TO_LENGTH(array.length);
388 return InnerArrayJoin(separator, array, length);
392 // Removes the last element from the array and returns it. See
395 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.pop");
397 var array = TO_OBJECT(this);
398 var n = TO_LENGTH(array.length);
400 array.length = n;
405 var value = array[n];
406 %DeleteProperty_Strict(array, n);
407 array.length = n;
412 // Appends the arguments to the end of the array and returns the new
413 // length of the array. See ECMA-262, section 15.4.4.7.
415 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.push");
417 var array = TO_OBJECT(this);
418 var n = TO_LENGTH(array.length);
427 array[i+n] = arguments[i];
431 array.length = new_length;
437 function SparseReverse(array, len) {
438 var keys = GetSortedArrayKeys(array, %GetArrayKeys(array, len));
459 var current_i = array[low];
460 if (!IS_UNDEFINED(current_i) || low in array) {
461 var current_j = array[high];
462 if (!IS_UNDEFINED(current_j) || high in array) {
463 array[low] = current_j;
464 array[high] = current_i;
466 array[high] = current_i;
467 delete array[low];
470 var current_j = array[high];
471 if (!IS_UNDEFINED(current_j) || high in array) {
472 array[low] = current_j;
473 delete array[high];
479 function PackedArrayReverse(array, len) {
482 var current_i = array[i];
483 var current_j = array[j];
484 array[i] = current_j;
485 array[j] = current_i;
487 return array;
491 function GenericArrayReverse(array, len) {
494 if (i in array) {
495 var current_i = array[i];
496 if (j in array) {
497 var current_j = array[j];
498 array[i] = current_j;
499 array[j] = current_i;
501 array[j] = current_i;
502 delete array[i];
505 if (j in array) {
506 var current_j = array[j];
507 array[i] = current_j;
508 delete array[j];
512 return array;
517 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.reverse");
519 var array = TO_OBJECT(this);
520 var len = TO_LENGTH(array.length);
521 var isArray = IS_ARRAY(array);
523 if (UseSparseVariant(array, len, isArray, len)) {
524 %NormalizeElements(array);
525 SparseReverse(array, len);
526 return array;
527 } else if (isArray && %_HasFastPackedElements(array)) {
528 return PackedArrayReverse(array, len);
530 return GenericArrayReverse(array, len);
536 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.shift");
538 var array = TO_OBJECT(this);
539 var len = TO_LENGTH(array.length);
542 array.length = 0;
546 if (%object_is_sealed(array)) throw %make_type_error(kArrayFunctionsOnSealed);
548 var first = array[0];
550 if (UseSparseVariant(array, len, IS_ARRAY(array), len)) {
551 SparseMove(array, 0, 1, len, 0);
553 SimpleMove(array, 0, 1, len, 0);
556 array.length = len - 1;
563 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.unshift");
565 var array = TO_OBJECT(this);
566 var len = TO_LENGTH(array.length);
569 if (len > 0 && UseSparseVariant(array, len, IS_ARRAY(array), len) &&
570 !%object_is_sealed(array)) {
571 SparseMove(array, 0, 0, len, num_arguments);
573 SimpleMove(array, 0, 0, len, num_arguments);
577 array[i] = arguments[i];
581 array.length = new_length;
587 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.slice");
589 var array = TO_OBJECT(this);
590 var len = TO_LENGTH(array.length);
610 var result = ArraySpeciesCreate(array, MaxSimple(end_i - start_i, 0));
614 if (UseSparseVariant(array, len, IS_ARRAY(array), end_i - start_i)) {
615 %NormalizeElements(array);
617 SparseSlice(array, start_i, end_i - start_i, len, result);
619 SimpleSlice(array, start_i, end_i - start_i, len, result);
660 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.splice");
663 var array = TO_OBJECT(this);
664 var len = TO_LENGTH(array.length);
668 var deleted_elements = ArraySpeciesCreate(array, del_count);
672 if (del_count != num_elements_to_add && %object_is_sealed(array)) {
674 } else if (del_count > 0 && %object_is_frozen(array)) {
684 if (UseSparseVariant(array, len, IS_ARRAY(array), changed_elements)) {
685 %NormalizeElements(array);
687 SparseSlice(array, start_i, del_count, len, deleted_elements);
688 SparseMove(array, start_i, del_count, len, num_elements_to_add);
690 SimpleSlice(array, start_i, del_count, len, deleted_elements);
691 SimpleMove(array, start_i, del_count, len, num_elements_to_add);
694 // Insert the arguments into the resulting array in
700 array[i++] = arguments[arguments_index++];
702 array.length = len - del_count + num_elements_to_add;
709 function InnerArraySort(array, length, comparefn) {
903 // in the beginning of the array. Write undefineds and holes at the end
915 // array with indices <= first_undefined or > last_defined.
934 // If there were any undefineds in the entire array, first_undefined
958 if (length < 2) return array;
960 var is_array = IS_ARRAY(array);
964 // the prototype chain on non-Array objects.
971 max_prototype_element = CopyFromPrototype(array, length);
975 var num_non_undefined = %RemoveArrayHoles(array, length);
978 // There were indexed accessors in the array.
979 // Move array holes and undefineds to the end using a Javascript function
981 num_non_undefined = SafeRemoveArrayHoles(array);
984 QuickSort(array, 0, num_non_undefined);
989 ShadowPrototypeElements(array, num_non_undefined, max_prototype_element);
992 return array;
997 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.sort");
999 var array = TO_OBJECT(this);
1000 var length = TO_LENGTH(array.length);
1001 return InnerArraySort(array, length, comparefn);
1007 // or delete elements from the array.
1008 function InnerArrayFilter(f, receiver, array, length, result) {
1011 if (i in array) {
1012 var element = array[i];
1013 if (%_Call(f, receiver, element, i, array)) {
1025 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.filter");
1029 var array = TO_OBJECT(this);
1030 var length = TO_LENGTH(array.length);
1032 var result = ArraySpeciesCreate(array, 0);
1033 return InnerArrayFilter(f, receiver, array, length, result);
1037 function InnerArrayForEach(f, receiver, array, length) {
1042 if (i in array) {
1043 var element = array[i];
1044 f(element, i, array);
1049 if (i in array) {
1050 var element = array[i];
1051 %_Call(f, receiver, element, i, array);
1059 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.forEach");
1063 var array = TO_OBJECT(this);
1064 var length = TO_LENGTH(array.length);
1065 InnerArrayForEach(f, receiver, array, length);
1069 function InnerArraySome(f, receiver, array, length) {
1073 if (i in array) {
1074 var element = array[i];
1075 if (%_Call(f, receiver, element, i, array)) return true;
1083 // array until it finds one where callback returns true.
1085 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.some");
1089 var array = TO_OBJECT(this);
1090 var length = TO_LENGTH(array.length);
1091 return InnerArraySome(f, receiver, array, length);
1095 function InnerArrayEvery(f, receiver, array, length) {
1099 if (i in array) {
1100 var element = array[i];
1101 if (!%_Call(f, receiver, element, i, array)) return false;
1108 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.every");
1112 var array = TO_OBJECT(this);
1113 var length = TO_LENGTH(array.length);
1114 return InnerArrayEvery(f, receiver, array, length);
1119 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.map");
1123 var array = TO_OBJECT(this);
1124 var length = TO_LENGTH(array.length);
1126 var result = ArraySpeciesCreate(array, length);
1128 if (i in array) {
1129 array[i];
1130 %CreateDataProperty(result, i, %_Call(f, receiver, element, i, array));
1137 function InnerArrayLastIndexOf(array, element, index, length, argumentsLength) {
1143 // If index is negative, index from end of the array.
1145 // If index is still negative, do not search the array.
1151 if (UseSparseVariant(array, length, IS_ARRAY(array), index)) {
1152 %NormalizeElements(array);
1153 var indices = %GetArrayKeys(array, index + 1);
1161 var sortedKeys = GetSortedArrayKeys(array, indices);
1165 if (array[key] === element) return key;
1171 // Lookup through the array.
1174 if (array[i] === element) return i;
1179 if (IS_UNDEFINED(array[i]) && i in array) {
1188 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.lastIndexOf");
1196 function InnerArrayReduce(callback, current, array, length, argumentsLength) {
1204 if (i in array) {
1205 current = array[i++];
1213 if (i in array) {
1214 var element = array[i];
1215 current = callback(current, element, i, array);
1223 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.reduce");
1227 var array = TO_OBJECT(this);
1228 var length = TO_LENGTH(array.length);
1229 return InnerArrayReduce(callback, current, array, length,
1234 function InnerArrayReduceRight(callback, current, array, length,
1243 if (i in array) {
1244 current = array[i--];
1252 if (i in array) {
1253 var element = array[i];
1254 current = callback(current, element, i, array);
1262 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.reduceRight");
1266 var array = TO_OBJECT(this);
1267 var length = TO_LENGTH(array.length);
1268 return InnerArrayReduceRight(callback, current, array, length,
1273 // ES#sec-array.prototype.copywithin
1274 // (Array.prototype.copyWithin ( target, start [ , end ] )
1276 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.copyWithin");
1278 var array = TO_OBJECT(this);
1279 var length = TO_LENGTH(array.length);
1314 if (from in array) {
1315 array[to] = array[from];
1317 delete array[to];
1324 return array;
1328 function InnerArrayFind(predicate, thisArg, array, length) {
1334 var element = array[i];
1335 if (%_Call(predicate, thisArg, element, i, array)) {
1346 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.find");
1348 var array = TO_OBJECT(this);
1349 var length = TO_INTEGER(array.length);
1351 return InnerArrayFind(predicate, thisArg, array, length);
1355 function InnerArrayFindIndex(predicate, thisArg, array, length) {
1361 var element = array[i];
1362 if (%_Call(predicate, thisArg, element, i, array)) {
1373 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.findIndex");
1375 var array = TO_OBJECT(this);
1376 var length = TO_INTEGER(array.length);
1378 return InnerArrayFindIndex(predicate, thisArg, array, length);
1383 function InnerArrayFill(value, start, end, array, length) {
1401 if ((end - i) > 0 && %object_is_frozen(array)) {
1406 array[i] = value;
1407 return array;
1413 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.fill");
1415 var array = TO_OBJECT(this);
1416 var length = TO_LENGTH(array.length);
1418 return InnerArrayFill(value, start, end, array, length);
1480 var array = %IsConstructor(constructor) ? new constructor(length) : [];
1482 %CreateDataProperty(array, i, args[i]);
1484 array.length = length;
1485 return array;
1490 // Set up non-enumerable constructor property on the Array.prototype
1495 // Set up unscopable properties on the Array.prototype object.
1512 // Set up non-enumerable functions on the Array object.
1531 // Array prototype functions that return iterators. They are exposed to the
1540 // Set up non-enumerable functions of the Array.prototype object and
1584 // The internal Array prototype doesn't need to be fancy, since it's never