Chromium Code Reviews| 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 |