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 569 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
580 } else { | 580 } else { |
581 var current_j = array[high]; | 581 var current_j = array[high]; |
582 if (!IS_UNDEFINED(current_j) || high in array) { | 582 if (!IS_UNDEFINED(current_j) || high in array) { |
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 | 590 function PackedArrayReverse(array, len) { |
591 function InnerArrayReverse(array, len) { | |
592 var j = len - 1; | 591 var j = len - 1; |
593 for (var i = 0; i < j; i++, j--) { | 592 for (var i = 0; i < j; i++, j--) { |
594 var current_i = array[i]; | 593 var current_i = array[i]; |
595 if (!IS_UNDEFINED(current_i) || i in array) { | 594 var current_j = array[j]; |
596 var current_j = array[j]; | 595 array[i] = current_j; |
597 if (!IS_UNDEFINED(current_j) || j in array) { | 596 array[j] = current_i; |
| 597 } |
| 598 return array; |
| 599 } |
| 600 |
| 601 |
| 602 function GenericArrayReverse(array, len) { |
| 603 var j = len - 1; |
| 604 for (var i = 0; i < j; i++, j--) { |
| 605 if (i in array) { |
| 606 var current_i = array[i]; |
| 607 if (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); |
| 632 var isArray = IS_ARRAY(array); |
621 | 633 |
622 if (UseSparseVariant(array, len, IS_ARRAY(array), len)) { | 634 if (UseSparseVariant(array, len, isArray, len)) { |
623 %NormalizeElements(array); | 635 %NormalizeElements(array); |
624 SparseReverse(array, len); | 636 SparseReverse(array, len); |
625 return array; | 637 return array; |
| 638 } else if (isArray && %_HasFastPackedElements(array)) { |
| 639 return PackedArrayReverse(array, len); |
| 640 } else { |
| 641 return GenericArrayReverse(array, len); |
626 } | 642 } |
627 | |
628 return InnerArrayReverse(array, len); | |
629 } | 643 } |
630 | 644 |
631 | 645 |
632 function ObservedArrayShift(len) { | 646 function ObservedArrayShift(len) { |
633 var first = this[0]; | 647 var first = this[0]; |
634 | 648 |
635 try { | 649 try { |
636 $observeBeginPerformSplice(this); | 650 $observeBeginPerformSplice(this); |
637 SimpleMove(this, 0, 1, len, 0); | 651 SimpleMove(this, 0, 1, len, 0); |
638 this.length = len - 1; | 652 this.length = len - 1; |
(...skipping 1042 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1681 to.ArrayToString = ArrayToString; | 1695 to.ArrayToString = ArrayToString; |
1682 to.InnerArrayEvery = InnerArrayEvery; | 1696 to.InnerArrayEvery = InnerArrayEvery; |
1683 to.InnerArrayFilter = InnerArrayFilter; | 1697 to.InnerArrayFilter = InnerArrayFilter; |
1684 to.InnerArrayForEach = InnerArrayForEach; | 1698 to.InnerArrayForEach = InnerArrayForEach; |
1685 to.InnerArrayIndexOf = InnerArrayIndexOf; | 1699 to.InnerArrayIndexOf = InnerArrayIndexOf; |
1686 to.InnerArrayJoin = InnerArrayJoin; | 1700 to.InnerArrayJoin = InnerArrayJoin; |
1687 to.InnerArrayLastIndexOf = InnerArrayLastIndexOf; | 1701 to.InnerArrayLastIndexOf = InnerArrayLastIndexOf; |
1688 to.InnerArrayMap = InnerArrayMap; | 1702 to.InnerArrayMap = InnerArrayMap; |
1689 to.InnerArrayReduce = InnerArrayReduce; | 1703 to.InnerArrayReduce = InnerArrayReduce; |
1690 to.InnerArrayReduceRight = InnerArrayReduceRight; | 1704 to.InnerArrayReduceRight = InnerArrayReduceRight; |
1691 to.InnerArrayReverse = InnerArrayReverse; | |
1692 to.InnerArraySome = InnerArraySome; | 1705 to.InnerArraySome = InnerArraySome; |
1693 to.InnerArraySort = InnerArraySort; | 1706 to.InnerArraySort = InnerArraySort; |
1694 to.InnerArrayToLocaleString = InnerArrayToLocaleString; | 1707 to.InnerArrayToLocaleString = InnerArrayToLocaleString; |
| 1708 to.PackedArrayReverse = PackedArrayReverse; |
1695 }); | 1709 }); |
1696 | 1710 |
1697 $arrayConcat = ArrayConcatJS; | 1711 $arrayConcat = ArrayConcatJS; |
1698 $arrayPush = ArrayPush; | 1712 $arrayPush = ArrayPush; |
1699 $arrayPop = ArrayPop; | 1713 $arrayPop = ArrayPop; |
1700 $arrayShift = ArrayShift; | 1714 $arrayShift = ArrayShift; |
1701 $arraySlice = ArraySlice; | 1715 $arraySlice = ArraySlice; |
1702 $arraySplice = ArraySplice; | 1716 $arraySplice = ArraySplice; |
1703 $arrayUnshift = ArrayUnshift; | 1717 $arrayUnshift = ArrayUnshift; |
1704 | 1718 |
1705 }); | 1719 }); |
OLD | NEW |