| 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; |
| (...skipping 602 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 613 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.shift"); | 613 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.shift"); |
| 614 | 614 |
| 615 var array = TO_OBJECT_INLINE(this); | 615 var array = TO_OBJECT_INLINE(this); |
| 616 var len = TO_UINT32(array.length); | 616 var len = TO_UINT32(array.length); |
| 617 | 617 |
| 618 if (len === 0) { | 618 if (len === 0) { |
| 619 array.length = 0; | 619 array.length = 0; |
| 620 return; | 620 return; |
| 621 } | 621 } |
| 622 | 622 |
| 623 if (ObjectIsSealed(array)) { | 623 if (ObjectIsSealed(array)) throw MakeTypeError(kArrayFunctionsOnSealed); |
| 624 throw MakeTypeError("array_functions_change_sealed", | |
| 625 ["Array.prototype.shift"]); | |
| 626 } | |
| 627 | 624 |
| 628 if (%IsObserved(array)) | 625 if (%IsObserved(array)) |
| 629 return ObservedArrayShift.call(array, len); | 626 return ObservedArrayShift.call(array, len); |
| 630 | 627 |
| 631 var first = array[0]; | 628 var first = array[0]; |
| 632 | 629 |
| 633 if (UseSparseVariant(array, len, IS_ARRAY(array), len)) { | 630 if (UseSparseVariant(array, len, IS_ARRAY(array), len)) { |
| 634 SparseMove(array, 0, 1, len, 0); | 631 SparseMove(array, 0, 1, len, 0); |
| 635 } else { | 632 } else { |
| 636 SimpleMove(array, 0, 1, len, 0); | 633 SimpleMove(array, 0, 1, len, 0); |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 814 var array = TO_OBJECT_INLINE(this); | 811 var array = TO_OBJECT_INLINE(this); |
| 815 var len = TO_UINT32(array.length); | 812 var len = TO_UINT32(array.length); |
| 816 var start_i = ComputeSpliceStartIndex(TO_INTEGER(start), len); | 813 var start_i = ComputeSpliceStartIndex(TO_INTEGER(start), len); |
| 817 var del_count = ComputeSpliceDeleteCount(delete_count, num_arguments, len, | 814 var del_count = ComputeSpliceDeleteCount(delete_count, num_arguments, len, |
| 818 start_i); | 815 start_i); |
| 819 var deleted_elements = []; | 816 var deleted_elements = []; |
| 820 deleted_elements.length = del_count; | 817 deleted_elements.length = del_count; |
| 821 var num_elements_to_add = num_arguments > 2 ? num_arguments - 2 : 0; | 818 var num_elements_to_add = num_arguments > 2 ? num_arguments - 2 : 0; |
| 822 | 819 |
| 823 if (del_count != num_elements_to_add && ObjectIsSealed(array)) { | 820 if (del_count != num_elements_to_add && ObjectIsSealed(array)) { |
| 824 throw MakeTypeError("array_functions_change_sealed", | 821 throw MakeTypeError(kArrayFunctionsOnSealed); |
| 825 ["Array.prototype.splice"]); | |
| 826 } else if (del_count > 0 && ObjectIsFrozen(array)) { | 822 } else if (del_count > 0 && ObjectIsFrozen(array)) { |
| 827 throw MakeTypeError("array_functions_on_frozen", | 823 throw MakeTypeError(kArrayFunctionsOnFrozen); |
| 828 ["Array.prototype.splice"]); | |
| 829 } | 824 } |
| 830 | 825 |
| 831 var changed_elements = del_count; | 826 var changed_elements = del_count; |
| 832 if (num_elements_to_add != del_count) { | 827 if (num_elements_to_add != del_count) { |
| 833 // If the slice needs to do a actually move elements after the insertion | 828 // If the slice needs to do a actually move elements after the insertion |
| 834 // point, then include those in the estimate of changed elements. | 829 // point, then include those in the estimate of changed elements. |
| 835 changed_elements += len - start_i - del_count; | 830 changed_elements += len - start_i - del_count; |
| 836 } | 831 } |
| 837 if (UseSparseVariant(array, len, IS_ARRAY(array), changed_elements)) { | 832 if (UseSparseVariant(array, len, IS_ARRAY(array), changed_elements)) { |
| 838 %NormalizeElements(array); | 833 %NormalizeElements(array); |
| (...skipping 600 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1439 | 1434 |
| 1440 var is_array = IS_ARRAY(array); | 1435 var is_array = IS_ARRAY(array); |
| 1441 var i = 0; | 1436 var i = 0; |
| 1442 find_initial: if (%_ArgumentsLength() < 2) { | 1437 find_initial: if (%_ArgumentsLength() < 2) { |
| 1443 for (; i < length; i++) { | 1438 for (; i < length; i++) { |
| 1444 if (HAS_INDEX(array, i, is_array)) { | 1439 if (HAS_INDEX(array, i, is_array)) { |
| 1445 current = array[i++]; | 1440 current = array[i++]; |
| 1446 break find_initial; | 1441 break find_initial; |
| 1447 } | 1442 } |
| 1448 } | 1443 } |
| 1449 throw MakeTypeError('reduce_no_initial', []); | 1444 throw MakeTypeError(kReduceNoInitial); |
| 1450 } | 1445 } |
| 1451 | 1446 |
| 1452 var receiver = %GetDefaultReceiver(callback); | 1447 var receiver = %GetDefaultReceiver(callback); |
| 1453 var stepping = DEBUG_IS_ACTIVE && %DebugCallbackSupportsStepping(callback); | 1448 var stepping = DEBUG_IS_ACTIVE && %DebugCallbackSupportsStepping(callback); |
| 1454 for (; i < length; i++) { | 1449 for (; i < length; i++) { |
| 1455 if (HAS_INDEX(array, i, is_array)) { | 1450 if (HAS_INDEX(array, i, is_array)) { |
| 1456 var element = array[i]; | 1451 var element = array[i]; |
| 1457 // Prepare break slots for debugger step in. | 1452 // Prepare break slots for debugger step in. |
| 1458 if (stepping) %DebugPrepareStepInIfStepping(callback); | 1453 if (stepping) %DebugPrepareStepInIfStepping(callback); |
| 1459 current = %_CallFunction(receiver, current, element, i, array, callback); | 1454 current = %_CallFunction(receiver, current, element, i, array, callback); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 1477 | 1472 |
| 1478 var is_array = IS_ARRAY(array); | 1473 var is_array = IS_ARRAY(array); |
| 1479 var i = length - 1; | 1474 var i = length - 1; |
| 1480 find_initial: if (%_ArgumentsLength() < 2) { | 1475 find_initial: if (%_ArgumentsLength() < 2) { |
| 1481 for (; i >= 0; i--) { | 1476 for (; i >= 0; i--) { |
| 1482 if (HAS_INDEX(array, i, is_array)) { | 1477 if (HAS_INDEX(array, i, is_array)) { |
| 1483 current = array[i--]; | 1478 current = array[i--]; |
| 1484 break find_initial; | 1479 break find_initial; |
| 1485 } | 1480 } |
| 1486 } | 1481 } |
| 1487 throw MakeTypeError('reduce_no_initial', []); | 1482 throw MakeTypeError(kReduceNoInitial); |
| 1488 } | 1483 } |
| 1489 | 1484 |
| 1490 var receiver = %GetDefaultReceiver(callback); | 1485 var receiver = %GetDefaultReceiver(callback); |
| 1491 var stepping = DEBUG_IS_ACTIVE && %DebugCallbackSupportsStepping(callback); | 1486 var stepping = DEBUG_IS_ACTIVE && %DebugCallbackSupportsStepping(callback); |
| 1492 for (; i >= 0; i--) { | 1487 for (; i >= 0; i--) { |
| 1493 if (HAS_INDEX(array, i, is_array)) { | 1488 if (HAS_INDEX(array, i, is_array)) { |
| 1494 var element = array[i]; | 1489 var element = array[i]; |
| 1495 // Prepare break slots for debugger step in. | 1490 // Prepare break slots for debugger step in. |
| 1496 if (stepping) %DebugPrepareStepInIfStepping(callback); | 1491 if (stepping) %DebugPrepareStepInIfStepping(callback); |
| 1497 current = %_CallFunction(receiver, current, element, i, array, callback); | 1492 current = %_CallFunction(receiver, current, element, i, array, callback); |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1596 $arrayConcat = ArrayConcatJS; | 1591 $arrayConcat = ArrayConcatJS; |
| 1597 $arrayJoin = ArrayJoin; | 1592 $arrayJoin = ArrayJoin; |
| 1598 $arrayPush = ArrayPush; | 1593 $arrayPush = ArrayPush; |
| 1599 $arrayPop = ArrayPop; | 1594 $arrayPop = ArrayPop; |
| 1600 $arrayShift = ArrayShift; | 1595 $arrayShift = ArrayShift; |
| 1601 $arraySlice = ArraySlice; | 1596 $arraySlice = ArraySlice; |
| 1602 $arraySplice = ArraySplice; | 1597 $arraySplice = ArraySplice; |
| 1603 $arrayUnshift = ArrayUnshift; | 1598 $arrayUnshift = ArrayUnshift; |
| 1604 | 1599 |
| 1605 })(); | 1600 })(); |
| OLD | NEW |