OLD | NEW |
---|---|
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 var $arrayConcat; | 5 var $arrayConcat; |
6 var $arrayPush; | 6 var $arrayPush; |
7 var $arrayPop; | 7 var $arrayPop; |
8 var $arrayShift; | 8 var $arrayShift; |
9 var $arraySlice; | 9 var $arraySlice; |
10 var $arraySplice; | 10 var $arraySplice; |
(...skipping 549 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
560 high = j; | 560 high = j; |
561 while (keys[--high_counter] == j) { } | 561 while (keys[--high_counter] == j) { } |
562 low = j_complement; | 562 low = j_complement; |
563 } | 563 } |
564 if (j_complement >= i) { | 564 if (j_complement >= i) { |
565 low = i; | 565 low = i; |
566 while (keys[++low_counter] == i) { } | 566 while (keys[++low_counter] == i) { } |
567 high = len - i - 1; | 567 high = len - i - 1; |
568 } | 568 } |
569 | 569 |
570 var current_i = array[low]; | 570 if (low in array) { |
571 if (!IS_UNDEFINED(current_i) || low in array) { | 571 var current_i = array[low]; |
adamk
2015/07/16 22:08:13
As discussed offline, I don't think SparseReverse
Dan Ehrenberg
2015/07/16 22:16:49
Done.
| |
572 var current_j = array[high]; | 572 if (high in array) { |
573 if (!IS_UNDEFINED(current_j) || high in array) { | 573 var current_j = array[high]; |
574 array[low] = current_j; | 574 array[low] = current_j; |
575 array[high] = current_i; | 575 array[high] = current_i; |
576 } else { | 576 } else { |
577 array[high] = current_i; | 577 array[high] = current_i; |
578 delete array[low]; | 578 delete array[low]; |
579 } | 579 } |
580 } else { | 580 } else { |
581 var current_j = array[high]; | 581 if (high in array) { |
582 if (!IS_UNDEFINED(current_j) || high in array) { | 582 var current_j = array[high]; |
583 array[low] = current_j; | 583 array[low] = current_j; |
584 delete array[high]; | 584 delete array[high]; |
585 } | 585 } |
586 } | 586 } |
587 } | 587 } |
588 } | 588 } |
589 | 589 |
590 function PackedArrayReverse(array, len) { | |
591 var j = len - 1; | |
592 for (var i = 0; i < j; i++, j--) { | |
593 var current_i = array[i]; | |
594 var current_j = array[j]; | |
595 array[i] = current_j; | |
596 array[j] = current_i; | |
597 } | |
598 return array; | |
599 } | |
600 | |
590 | 601 |
591 function InnerArrayReverse(array, len) { | 602 function InnerArrayReverse(array, len) { |
592 var j = len - 1; | 603 var j = len - 1; |
593 for (var i = 0; i < j; i++, j--) { | 604 for (var i = 0; i < j; i++, j--) { |
594 var current_i = array[i]; | 605 if (i in array) { |
595 if (!IS_UNDEFINED(current_i) || i in array) { | 606 var current_i = array[i]; |
596 var current_j = array[j]; | 607 if (j in array) { |
597 if (!IS_UNDEFINED(current_j) || j in array) { | 608 var current_j = array[j]; |
598 array[i] = current_j; | 609 array[i] = current_j; |
599 array[j] = current_i; | 610 array[j] = current_i; |
600 } else { | 611 } else { |
601 array[j] = current_i; | 612 array[j] = current_i; |
602 delete array[i]; | 613 delete array[i]; |
603 } | 614 } |
604 } else { | 615 } else { |
605 var current_j = array[j]; | 616 if (j in array) { |
606 if (!IS_UNDEFINED(current_j) || j in array) { | 617 var current_j = array[j]; |
607 array[i] = current_j; | 618 array[i] = current_j; |
608 delete array[j]; | 619 delete array[j]; |
609 } | 620 } |
610 } | 621 } |
611 } | 622 } |
612 return array; | 623 return array; |
613 } | 624 } |
614 | 625 |
615 | 626 |
616 function ArrayReverse() { | 627 function ArrayReverse() { |
617 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.reverse"); | 628 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.reverse"); |
618 | 629 |
619 var array = TO_OBJECT_INLINE(this); | 630 var array = TO_OBJECT_INLINE(this); |
620 var len = TO_UINT32(array.length); | 631 var len = TO_UINT32(array.length); |
621 | 632 |
622 if (UseSparseVariant(array, len, IS_ARRAY(array), len)) { | 633 if (UseSparseVariant(array, len, IS_ARRAY(array), len)) { |
623 %NormalizeElements(array); | 634 %NormalizeElements(array); |
624 SparseReverse(array, len); | 635 SparseReverse(array, len); |
625 return array; | 636 return array; |
637 } else if (%_HasFastPackedElements(array)) { | |
adamk
2015/07/16 22:08:13
This needs an IS_ARRAY check (you can cache this a
Toon Verwaest
2015/07/16 22:15:32
Do we have objects with packed elements that are n
Dan Ehrenberg
2015/07/16 22:16:49
Done.
| |
638 return PackedArrayReverse(array, len); | |
639 } else { | |
640 return InnerArrayReverse(array, len); | |
adamk
2015/07/16 22:08:13
how about "GenericArrayReverse" as the name for th
Dan Ehrenberg
2015/07/16 22:16:49
Done.
| |
626 } | 641 } |
627 | |
628 return InnerArrayReverse(array, len); | |
629 } | 642 } |
630 | 643 |
631 | 644 |
632 function ObservedArrayShift(len) { | 645 function ObservedArrayShift(len) { |
633 var first = this[0]; | 646 var first = this[0]; |
634 | 647 |
635 try { | 648 try { |
636 $observeBeginPerformSplice(this); | 649 $observeBeginPerformSplice(this); |
637 SimpleMove(this, 0, 1, len, 0); | 650 SimpleMove(this, 0, 1, len, 0); |
638 this.length = len - 1; | 651 this.length = len - 1; |
(...skipping 1042 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1681 to.ArrayToString = ArrayToString; | 1694 to.ArrayToString = ArrayToString; |
1682 to.InnerArrayEvery = InnerArrayEvery; | 1695 to.InnerArrayEvery = InnerArrayEvery; |
1683 to.InnerArrayFilter = InnerArrayFilter; | 1696 to.InnerArrayFilter = InnerArrayFilter; |
1684 to.InnerArrayForEach = InnerArrayForEach; | 1697 to.InnerArrayForEach = InnerArrayForEach; |
1685 to.InnerArrayIndexOf = InnerArrayIndexOf; | 1698 to.InnerArrayIndexOf = InnerArrayIndexOf; |
1686 to.InnerArrayJoin = InnerArrayJoin; | 1699 to.InnerArrayJoin = InnerArrayJoin; |
1687 to.InnerArrayLastIndexOf = InnerArrayLastIndexOf; | 1700 to.InnerArrayLastIndexOf = InnerArrayLastIndexOf; |
1688 to.InnerArrayMap = InnerArrayMap; | 1701 to.InnerArrayMap = InnerArrayMap; |
1689 to.InnerArrayReduce = InnerArrayReduce; | 1702 to.InnerArrayReduce = InnerArrayReduce; |
1690 to.InnerArrayReduceRight = InnerArrayReduceRight; | 1703 to.InnerArrayReduceRight = InnerArrayReduceRight; |
1691 to.InnerArrayReverse = InnerArrayReverse; | |
1692 to.InnerArraySome = InnerArraySome; | 1704 to.InnerArraySome = InnerArraySome; |
1693 to.InnerArraySort = InnerArraySort; | 1705 to.InnerArraySort = InnerArraySort; |
1694 to.InnerArrayToLocaleString = InnerArrayToLocaleString; | 1706 to.InnerArrayToLocaleString = InnerArrayToLocaleString; |
1707 to.PackedArrayReverse = PackedArrayReverse; | |
1695 }); | 1708 }); |
1696 | 1709 |
1697 $arrayConcat = ArrayConcatJS; | 1710 $arrayConcat = ArrayConcatJS; |
1698 $arrayPush = ArrayPush; | 1711 $arrayPush = ArrayPush; |
1699 $arrayPop = ArrayPop; | 1712 $arrayPop = ArrayPop; |
1700 $arrayShift = ArrayShift; | 1713 $arrayShift = ArrayShift; |
1701 $arraySlice = ArraySlice; | 1714 $arraySlice = ArraySlice; |
1702 $arraySplice = ArraySplice; | 1715 $arraySplice = ArraySplice; |
1703 $arrayUnshift = ArrayUnshift; | 1716 $arrayUnshift = ArrayUnshift; |
1704 | 1717 |
1705 }); | 1718 }); |
OLD | NEW |