Lines Matching refs:Array
9 // var $Array = global.Array;
18 // Gets a sorted array of array keys. Useful for operations on sparse
20 function GetSortedArrayKeys(array, indices) {
26 var e = array[i];
27 if (!IS_UNDEFINED(e) || i in array) {
36 var e = array[key];
37 if (!IS_UNDEFINED(e) || key in array) {
48 function SparseJoinWithSeparatorJS(array, len, convert, separator) {
49 var keys = GetSortedArrayKeys(array, %GetArrayKeys(array, len));
56 var e = array[key];
68 function SparseJoin(array, len, convert) {
69 var keys = GetSortedArrayKeys(array, %GetArrayKeys(array, len));
79 var e = array[key];
97 function Join(array, length, separator, convert) {
100 var is_array = IS_ARRAY(array);
103 // If the array is cyclic, return the empty string for already
105 if (!%PushIfAbsent(visited_arrays, array)) return '';
110 if (UseSparseVariant(array, length, is_array)) {
112 return SparseJoin(array, length, convert);
114 return SparseJoinWithSeparatorJS(array, length, convert, separator);
120 var e = array[0];
125 // Construct an array for the elements.
132 var e = array[i];
144 if (!IS_NUMBER(array[0])) {
146 var e = array[i];
152 var e = array[i];
166 // Make sure to remove the last element of the visited array no
195 // special array operations to handle sparse arrays in a sensible fashion.
196 function SmartSlice(array, start_i, del_count, len, deleted_elements) {
197 // Move deleted elements to a new array (the return value from splice).
198 var indices = %GetArrayKeys(array, start_i + del_count);
202 var current = array[i];
203 if (!IS_UNDEFINED(current) || i in array) {
213 var current = array[key];
214 if (!IS_UNDEFINED(current) || key in array) {
225 // special array operations to handle sparse arrays in a sensible fashion.
226 function SmartMove(array, start_i, del_count, len, num_additional_args) {
227 // Move data to new array.
229 var indices = %GetArrayKeys(array, len);
233 var current = array[i];
234 if (!IS_UNDEFINED(current) || i in array) {
239 var current = array[i];
240 if (!IS_UNDEFINED(current) || i in array) {
250 var current = array[key];
251 if (!IS_UNDEFINED(current) || key in array) {
255 var current = array[key];
256 if (!IS_UNDEFINED(current) || key in array) {
263 // Move contents of new_array into this array
264 %MoveArrayContents(new_array, array);
269 // because the receiver is not an array (so we have no choice) or because we
271 function SimpleSlice(array, start_i, del_count, len, deleted_elements) {
277 var current = array[index];
278 if (!IS_UNDEFINED(current) || index in array) {
285 function SimpleMove(array, start_i, del_count, len, num_additional_args) {
288 // to the right position in the resulting array.
296 var current = array[from_index];
297 if (!IS_UNDEFINED(current) || from_index in array) {
298 array[to_index] = current;
300 delete array[to_index];
310 var current = array[from_index];
311 if (!IS_UNDEFINED(current) || from_index in array) {
312 array[to_index] = current;
314 delete array[to_index];
318 delete array[i - 1];
329 var array;
336 array = this;
338 array = ToObject(this);
339 func = array.join;
342 return %_CallFunction(array, ObjectToString);
344 return %_CallFunction(array, func);
349 var array = ToObject(this);
350 var arrayLen = array.length;
353 return Join(array, len, ',', ConvertToLocaleString);
358 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.join");
360 var array = TO_OBJECT_INLINE(this);
361 var length = TO_UINT32(array.length);
368 var result = %_FastAsciiArrayJoin(array, separator);
371 return Join(array, length, separator, ConvertToString);
391 // Removes the last element from the array and returns it. See
394 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.pop");
396 var array = TO_OBJECT_INLINE(this);
397 var n = TO_UINT32(array.length);
399 array.length = n;
403 if (%IsObserved(array))
404 return ObservedArrayPop.call(array, n);
407 var value = array[n];
408 Delete(array, ToName(n), true);
409 array.length = n;
433 // Appends the arguments to the end of the array and returns the new
434 // length of the array. See ECMA-262, section 15.4.4.7.
436 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.push");
441 var array = TO_OBJECT_INLINE(this);
442 var n = TO_UINT32(array.length);
448 %SetProperty(array, i+n, %_Arguments(i), 0, kStrictMode);
452 array.length = new_length;
457 // Returns an array containing the array elements of the object followed
458 // by the array elements of each argument in order. See ECMA-262,
461 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.concat");
463 var array = ToObject(this);
466 arrays[0] = array;
476 function SparseReverse(array, len) {
477 var keys = GetSortedArrayKeys(array, %GetArrayKeys(array, len));
498 var current_i = array[low];
499 if (!IS_UNDEFINED(current_i) || low in array) {
500 var current_j = array[high];
501 if (!IS_UNDEFINED(current_j) || high in array) {
502 array[low] = current_j;
503 array[high] = current_i;
505 array[high] = current_i;
506 delete array[low];
509 var current_j = array[high];
510 if (!IS_UNDEFINED(current_j) || high in array) {
511 array[low] = current_j;
512 delete array[high];
520 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.reverse");
522 var array = TO_OBJECT_INLINE(this);
523 var j = TO_UINT32(array.length) - 1;
525 if (UseSparseVariant(array, j, IS_ARRAY(array))) {
526 SparseReverse(array, j+1);
527 return array;
531 var current_i = array[i];
532 if (!IS_UNDEFINED(current_i) || i in array) {
533 var current_j = array[j];
534 if (!IS_UNDEFINED(current_j) || j in array) {
535 array[i] = current_j;
536 array[j] = current_i;
538 array[j] = current_i;
539 delete array[i];
542 var current_j = array[j];
543 if (!IS_UNDEFINED(current_j) || j in array) {
544 array[i] = current_j;
545 delete array[j];
549 return array;
569 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.shift");
571 var array = TO_OBJECT_INLINE(this);
572 var len = TO_UINT32(array.length);
575 array.length = 0;
579 if (ObjectIsSealed(array)) {
581 ["Array.prototype.shift"]);
584 if (%IsObserved(array))
585 return ObservedArrayShift.call(array, len);
587 var first = array[0];
589 if (IS_ARRAY(array)) {
590 SmartMove(array, 0, 1, len, 0);
592 SimpleMove(array, 0, 1, len, 0);
595 array
621 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.unshift");
626 var array = TO_OBJECT_INLINE(this);
627 var len = TO_UINT32(array.length);
629 var is_sealed = ObjectIsSealed(array);
631 if (IS_ARRAY(array) && !is_sealed && len > 0) {
632 SmartMove(array, 0, 0, len, num_arguments);
634 SimpleMove(array, 0, 0, len, num_arguments);
638 array[i] = %_Arguments(i);
642 array.length = new_length;
648 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.slice");
650 var array = TO_OBJECT_INLINE(this);
651 var len = TO_UINT32(array.length);
675 if (IS_ARRAY(array) &&
676 !%IsObserved(array) &&
678 (%EstimateNumberOfElements(array) < end_i)) {
679 SmartSlice(array, start_i, end_i - start_i, len, result);
681 SimpleSlice(array, start_i, end_i - start_i, len, result);
737 // Insert the arguments into the resulting array in
763 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.splice");
769 var array = TO_OBJECT_INLINE(this);
770 var len = TO_UINT32(array.length);
778 if (del_count != num_elements_to_add && ObjectIsSealed(array)) {
780 ["Array.prototype.splice"]);
781 } else if (del_count > 0 && ObjectIsFrozen(array)) {
783 ["Array.prototype.splice"]);
787 if (IS_ARRAY(array) &&
790 // array then the simple version is going to be faster, because it
791 // doesn't touch most of the array.
792 var estimated_non_hole_elements = %EstimateNumberOfElements(array);
799 SimpleSlice(array, start_i, del_count, len, deleted_elements);
800 SimpleMove(array, start_i, del_count, len, num_elements_to_add);
802 SmartSlice(array, start_i, del_count, len, deleted_elements);
803 SmartMove(array, start_i, del_count, len, num_elements_to_add);
806 // Insert the arguments into the resulting array in
812 array[i++] = %_Arguments(arguments_index++);
814 array.length = len - del_count + num_elements_to_add;
822 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.sort");
1014 // in the beginning of the array. Write undefineds and holes at the end
1026 // array with indices <= first_undefined or > last_defined.
1045 // If there were any undefineds in the entire array, first_undefined
1076 // the prototype chain on non-Array objects.
1090 // The array is observed, or there were indexed accessors in the array.
1091 // Move array holes and undefineds to the end using a Javascript function
1110 // or delete elements from the array.
1112 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.filter");
1116 var array = ToObject(this);
1117 array.length);
1128 var result = new $Array();
1133 if (i in array) {
1134 var element = array[i];
1137 if (%_CallFunction(receiver, element, i, array, f)) {
1148 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.forEach");
1152 var array = ToObject(this);
1153 var length = TO_UINT32(array.length);
1166 if (i in array) {
1167 var element = array[i];
1170 %_CallFunction(receiver, element, i, array, f);
1177 // array until it finds one where callback returns true.
1179 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.some");
1183 var array = ToObject(this);
1184 var length = TO_UINT32(array.length);
1197 if (i in array) {
1198 var element = array[i];
1201 if (%_CallFunction(receiver, element, i, array, f)) return true;
1209 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.every");
1213 var array = ToObject(this);
1214 var length = TO_UINT32(array.length);
1227 if (i in array) {
1228 var element = array[i];
1231 if (!%_CallFunction(receiver, element, i, array, f)) return false;
1238 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.map");
1242 var array = ToObject(this);
1243 var length = TO_UINT32(array.length);
1254 var result = new $Array();
1258 if (i in array) {
1259 var element = array[i];
1262 accumulator[i] = %_CallFunction(receiver, element, i, array, f);
1271 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.indexOf");
1279 // If index is negative, index from the end of the array.
1282 // If index is still negative, search the entire array.
1309 // Lookup through the array.
1316 // Lookup through the array.
1327 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.lastIndexOf");
1335 // If index is negative, index from end of the array.
1337 // If index is still negative, do not search the array.
1362 // Lookup through the array.
1379 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.reduce");
1383 var array = ToObject(this);
1384 var length = ToUint32(array.length);
1393 current = array[i];
1394 if (!IS_UNDEFINED(current) || i in array) {
1405 if (i in array) {
1406 var element = array[i];
1409 current = %_CallFunction(receiver, current, element, i, array, callback);
1416 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.reduceRight");
1420 var array = ToObject(this);
1421 var length = ToUint32(array.length);
1430 current = array[i];
1431 if (!IS_UNDEFINED(current) || i in array) {
1442 if (i in array) {
1443 var element = array[i];
1446 current = %_CallFunction(receiver, current, element, i, array, callback);
1463 // Set up non-enumerable constructor property on the Array.prototype
1465 %SetProperty($Array.prototype, "constructor", $Array, DONT_ENUM);
1467 // Set up non-enumerable functions on the Array object.
1468 InstallFunctions($Array, DONT_ENUM, $Array(
1485 // Set up non-enumerable functions of the Array.prototype object and
1489 InstallFunctions($Array.prototype, DONT_ENUM, $Array(
1513 %FinishArrayPrototypeSetup($Array.prototype);
1515 // The internal Array prototype doesn't need to be fancy, since it's never
1518 SetUpLockedPrototype(InternalArray, $Array(), $Array(
1527 SetUpLockedPrototype(InternalPackedArray, $Array(), $Array(