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 $arrayJoin; | 6 var $arrayJoin; |
7 var $arrayPush; | 7 var $arrayPush; |
8 var $arrayPop; | 8 var $arrayPop; |
9 var $arrayShift; | 9 var $arrayShift; |
10 var $arraySlice; | 10 var $arraySlice; |
11 var $arraySplice; | 11 var $arraySplice; |
12 var $arrayUnshift; | 12 var $arrayUnshift; |
13 var $innerArrayForEach; | 13 var $innerArrayForEach; |
14 var $innerArrayEvery; | 14 var $innerArrayEvery; |
| 15 var $innerArrayReverse; |
15 | 16 |
16 (function(global, shared, exports) { | 17 (function(global, shared, exports) { |
17 | 18 |
18 "use strict"; | 19 "use strict"; |
19 | 20 |
20 %CheckIsBootstrapping(); | 21 %CheckIsBootstrapping(); |
21 | 22 |
22 // ------------------------------------------------------------------- | 23 // ------------------------------------------------------------------- |
23 // Imports | 24 // Imports |
24 | 25 |
(...skipping 532 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
557 var current_j = array[high]; | 558 var current_j = array[high]; |
558 if (!IS_UNDEFINED(current_j) || high in array) { | 559 if (!IS_UNDEFINED(current_j) || high in array) { |
559 array[low] = current_j; | 560 array[low] = current_j; |
560 delete array[high]; | 561 delete array[high]; |
561 } | 562 } |
562 } | 563 } |
563 } | 564 } |
564 } | 565 } |
565 | 566 |
566 | 567 |
567 function ArrayReverse() { | 568 function InnerArrayReverse(array, len) { |
568 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.reverse"); | |
569 | |
570 var array = TO_OBJECT_INLINE(this); | |
571 var len = TO_UINT32(array.length); | |
572 | |
573 if (UseSparseVariant(array, len, IS_ARRAY(array), len)) { | |
574 %NormalizeElements(array); | |
575 SparseReverse(array, len); | |
576 return array; | |
577 } | |
578 | |
579 var j = len - 1; | 569 var j = len - 1; |
580 for (var i = 0; i < j; i++, j--) { | 570 for (var i = 0; i < j; i++, j--) { |
581 var current_i = array[i]; | 571 var current_i = array[i]; |
582 if (!IS_UNDEFINED(current_i) || i in array) { | 572 if (!IS_UNDEFINED(current_i) || i in array) { |
583 var current_j = array[j]; | 573 var current_j = array[j]; |
584 if (!IS_UNDEFINED(current_j) || j in array) { | 574 if (!IS_UNDEFINED(current_j) || j in array) { |
585 array[i] = current_j; | 575 array[i] = current_j; |
586 array[j] = current_i; | 576 array[j] = current_i; |
587 } else { | 577 } else { |
588 array[j] = current_i; | 578 array[j] = current_i; |
589 delete array[i]; | 579 delete array[i]; |
590 } | 580 } |
591 } else { | 581 } else { |
592 var current_j = array[j]; | 582 var current_j = array[j]; |
593 if (!IS_UNDEFINED(current_j) || j in array) { | 583 if (!IS_UNDEFINED(current_j) || j in array) { |
594 array[i] = current_j; | 584 array[i] = current_j; |
595 delete array[j]; | 585 delete array[j]; |
596 } | 586 } |
597 } | 587 } |
598 } | 588 } |
599 return array; | 589 return array; |
600 } | 590 } |
601 | 591 |
602 | 592 |
| 593 function ArrayReverse() { |
| 594 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.reverse"); |
| 595 |
| 596 var array = TO_OBJECT_INLINE(this); |
| 597 var len = TO_UINT32(array.length); |
| 598 |
| 599 if (UseSparseVariant(array, len, IS_ARRAY(array), len)) { |
| 600 %NormalizeElements(array); |
| 601 SparseReverse(array, len); |
| 602 return array; |
| 603 } |
| 604 |
| 605 return InnerArrayReverse(array, len); |
| 606 } |
| 607 |
| 608 |
603 function ObservedArrayShift(len) { | 609 function ObservedArrayShift(len) { |
604 var first = this[0]; | 610 var first = this[0]; |
605 | 611 |
606 try { | 612 try { |
607 $observeBeginPerformSplice(this); | 613 $observeBeginPerformSplice(this); |
608 SimpleMove(this, 0, 1, len, 0); | 614 SimpleMove(this, 0, 1, len, 0); |
609 this.length = len - 1; | 615 this.length = len - 1; |
610 } finally { | 616 } finally { |
611 $observeEndPerformSplice(this); | 617 $observeEndPerformSplice(this); |
612 $observeEnqueueSpliceRecord(this, 0, [first], 0); | 618 $observeEnqueueSpliceRecord(this, 0, [first], 0); |
(...skipping 989 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1602 $arrayJoin = ArrayJoin; | 1608 $arrayJoin = ArrayJoin; |
1603 $arrayPush = ArrayPush; | 1609 $arrayPush = ArrayPush; |
1604 $arrayPop = ArrayPop; | 1610 $arrayPop = ArrayPop; |
1605 $arrayShift = ArrayShift; | 1611 $arrayShift = ArrayShift; |
1606 $arraySlice = ArraySlice; | 1612 $arraySlice = ArraySlice; |
1607 $arraySplice = ArraySplice; | 1613 $arraySplice = ArraySplice; |
1608 $arrayUnshift = ArrayUnshift; | 1614 $arrayUnshift = ArrayUnshift; |
1609 | 1615 |
1610 $innerArrayForEach = InnerArrayForEach; | 1616 $innerArrayForEach = InnerArrayForEach; |
1611 $innerArrayEvery = InnerArrayEvery; | 1617 $innerArrayEvery = InnerArrayEvery; |
| 1618 $innerArrayReverse = InnerArrayReverse; |
1612 | 1619 |
1613 }); | 1620 }); |
OLD | NEW |