| 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 (function(global, utils, extrasUtils) { | 5 (function(global, utils, extrasUtils) { |
| 6 | 6 |
| 7 "use strict"; | 7 "use strict"; |
| 8 | 8 |
| 9 %CheckIsBootstrapping(); | 9 %CheckIsBootstrapping(); |
| 10 | 10 |
| 11 // ------------------------------------------------------------------- | 11 // ------------------------------------------------------------------- |
| 12 // Imports | 12 // Imports |
| 13 | 13 |
| 14 var AddIndexedProperty; | 14 var AddIndexedProperty; |
| 15 var FLAG_harmony_tolength; | 15 var FLAG_harmony_tolength; |
| 16 var GetIterator; | 16 var GetIterator; |
| 17 var GetMethod; | 17 var GetMethod; |
| 18 var GlobalArray = global.Array; | 18 var GlobalArray = global.Array; |
| 19 var InternalArray = utils.InternalArray; | 19 var InternalArray = utils.InternalArray; |
| 20 var InternalPackedArray = utils.InternalPackedArray; | 20 var InternalPackedArray = utils.InternalPackedArray; |
| 21 var MakeTypeError; | 21 var MakeTypeError; |
| 22 var MaxSimple; | 22 var MaxSimple; |
| 23 var MinSimple; | 23 var MinSimple; |
| 24 var ObjectDefineProperty; | 24 var ObjectDefineProperty; |
| 25 var ObjectHasOwnProperty; | 25 var ObjectHasOwnProperty; |
| 26 var ObjectIsFrozen; | |
| 27 var ObjectIsSealed; | |
| 28 var ObjectToString = utils.ImportNow("object_to_string"); | 26 var ObjectToString = utils.ImportNow("object_to_string"); |
| 29 var ObserveBeginPerformSplice; | 27 var ObserveBeginPerformSplice; |
| 30 var ObserveEndPerformSplice; | 28 var ObserveEndPerformSplice; |
| 31 var ObserveEnqueueSpliceRecord; | 29 var ObserveEnqueueSpliceRecord; |
| 32 var SameValueZero; | 30 var SameValueZero; |
| 33 var iteratorSymbol = utils.ImportNow("iterator_symbol"); | 31 var iteratorSymbol = utils.ImportNow("iterator_symbol"); |
| 34 var unscopablesSymbol = utils.ImportNow("unscopables_symbol"); | 32 var unscopablesSymbol = utils.ImportNow("unscopables_symbol"); |
| 35 | 33 |
| 36 utils.Import(function(from) { | 34 utils.Import(function(from) { |
| 37 AddIndexedProperty = from.AddIndexedProperty; | 35 AddIndexedProperty = from.AddIndexedProperty; |
| 38 GetIterator = from.GetIterator; | 36 GetIterator = from.GetIterator; |
| 39 GetMethod = from.GetMethod; | 37 GetMethod = from.GetMethod; |
| 40 MakeTypeError = from.MakeTypeError; | 38 MakeTypeError = from.MakeTypeError; |
| 41 MaxSimple = from.MaxSimple; | 39 MaxSimple = from.MaxSimple; |
| 42 MinSimple = from.MinSimple; | 40 MinSimple = from.MinSimple; |
| 43 ObjectDefineProperty = from.ObjectDefineProperty; | 41 ObjectDefineProperty = from.ObjectDefineProperty; |
| 44 ObjectHasOwnProperty = from.ObjectHasOwnProperty; | 42 ObjectHasOwnProperty = from.ObjectHasOwnProperty; |
| 45 ObjectIsFrozen = from.ObjectIsFrozen; | |
| 46 ObjectIsSealed = from.ObjectIsSealed; | |
| 47 ObserveBeginPerformSplice = from.ObserveBeginPerformSplice; | 43 ObserveBeginPerformSplice = from.ObserveBeginPerformSplice; |
| 48 ObserveEndPerformSplice = from.ObserveEndPerformSplice; | 44 ObserveEndPerformSplice = from.ObserveEndPerformSplice; |
| 49 ObserveEnqueueSpliceRecord = from.ObserveEnqueueSpliceRecord; | 45 ObserveEnqueueSpliceRecord = from.ObserveEnqueueSpliceRecord; |
| 50 SameValueZero = from.SameValueZero; | 46 SameValueZero = from.SameValueZero; |
| 51 }); | 47 }); |
| 52 | 48 |
| 53 utils.ImportFromExperimental(function(from) { | 49 utils.ImportFromExperimental(function(from) { |
| 54 FLAG_harmony_tolength = from.FLAG_harmony_tolength; | 50 FLAG_harmony_tolength = from.FLAG_harmony_tolength; |
| 55 }); | 51 }); |
| 56 | 52 |
| (...skipping 608 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 665 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.shift"); | 661 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.shift"); |
| 666 | 662 |
| 667 var array = TO_OBJECT(this); | 663 var array = TO_OBJECT(this); |
| 668 var len = TO_LENGTH_OR_UINT32(array.length); | 664 var len = TO_LENGTH_OR_UINT32(array.length); |
| 669 | 665 |
| 670 if (len === 0) { | 666 if (len === 0) { |
| 671 array.length = 0; | 667 array.length = 0; |
| 672 return; | 668 return; |
| 673 } | 669 } |
| 674 | 670 |
| 675 if (ObjectIsSealed(array)) throw MakeTypeError(kArrayFunctionsOnSealed); | 671 if (%object_is_sealed(array)) throw MakeTypeError(kArrayFunctionsOnSealed); |
| 676 | 672 |
| 677 if (%IsObserved(array)) | 673 if (%IsObserved(array)) |
| 678 return ObservedArrayShift.call(array, len); | 674 return ObservedArrayShift.call(array, len); |
| 679 | 675 |
| 680 var first = array[0]; | 676 var first = array[0]; |
| 681 | 677 |
| 682 if (UseSparseVariant(array, len, IS_ARRAY(array), len)) { | 678 if (UseSparseVariant(array, len, IS_ARRAY(array), len)) { |
| 683 SparseMove(array, 0, 1, len, 0); | 679 SparseMove(array, 0, 1, len, 0); |
| 684 } else { | 680 } else { |
| 685 SimpleMove(array, 0, 1, len, 0); | 681 SimpleMove(array, 0, 1, len, 0); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 716 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.unshift"); | 712 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.unshift"); |
| 717 | 713 |
| 718 if (%IsObserved(this)) | 714 if (%IsObserved(this)) |
| 719 return ObservedArrayUnshift.apply(this, arguments); | 715 return ObservedArrayUnshift.apply(this, arguments); |
| 720 | 716 |
| 721 var array = TO_OBJECT(this); | 717 var array = TO_OBJECT(this); |
| 722 var len = TO_LENGTH_OR_UINT32(array.length); | 718 var len = TO_LENGTH_OR_UINT32(array.length); |
| 723 var num_arguments = %_ArgumentsLength(); | 719 var num_arguments = %_ArgumentsLength(); |
| 724 | 720 |
| 725 if (len > 0 && UseSparseVariant(array, len, IS_ARRAY(array), len) && | 721 if (len > 0 && UseSparseVariant(array, len, IS_ARRAY(array), len) && |
| 726 !ObjectIsSealed(array)) { | 722 !%object_is_sealed(array)) { |
| 727 SparseMove(array, 0, 0, len, num_arguments); | 723 SparseMove(array, 0, 0, len, num_arguments); |
| 728 } else { | 724 } else { |
| 729 SimpleMove(array, 0, 0, len, num_arguments); | 725 SimpleMove(array, 0, 0, len, num_arguments); |
| 730 } | 726 } |
| 731 | 727 |
| 732 for (var i = 0; i < num_arguments; i++) { | 728 for (var i = 0; i < num_arguments; i++) { |
| 733 array[i] = %_Arguments(i); | 729 array[i] = %_Arguments(i); |
| 734 } | 730 } |
| 735 | 731 |
| 736 var new_length = len + num_arguments; | 732 var new_length = len + num_arguments; |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 862 var num_arguments = %_ArgumentsLength(); | 858 var num_arguments = %_ArgumentsLength(); |
| 863 var array = TO_OBJECT(this); | 859 var array = TO_OBJECT(this); |
| 864 var len = TO_LENGTH_OR_UINT32(array.length); | 860 var len = TO_LENGTH_OR_UINT32(array.length); |
| 865 var start_i = ComputeSpliceStartIndex(TO_INTEGER(start), len); | 861 var start_i = ComputeSpliceStartIndex(TO_INTEGER(start), len); |
| 866 var del_count = ComputeSpliceDeleteCount(delete_count, num_arguments, len, | 862 var del_count = ComputeSpliceDeleteCount(delete_count, num_arguments, len, |
| 867 start_i); | 863 start_i); |
| 868 var deleted_elements = []; | 864 var deleted_elements = []; |
| 869 deleted_elements.length = del_count; | 865 deleted_elements.length = del_count; |
| 870 var num_elements_to_add = num_arguments > 2 ? num_arguments - 2 : 0; | 866 var num_elements_to_add = num_arguments > 2 ? num_arguments - 2 : 0; |
| 871 | 867 |
| 872 if (del_count != num_elements_to_add && ObjectIsSealed(array)) { | 868 if (del_count != num_elements_to_add && %object_is_sealed(array)) { |
| 873 throw MakeTypeError(kArrayFunctionsOnSealed); | 869 throw MakeTypeError(kArrayFunctionsOnSealed); |
| 874 } else if (del_count > 0 && ObjectIsFrozen(array)) { | 870 } else if (del_count > 0 && %object_is_frozen(array)) { |
| 875 throw MakeTypeError(kArrayFunctionsOnFrozen); | 871 throw MakeTypeError(kArrayFunctionsOnFrozen); |
| 876 } | 872 } |
| 877 | 873 |
| 878 var changed_elements = del_count; | 874 var changed_elements = del_count; |
| 879 if (num_elements_to_add != del_count) { | 875 if (num_elements_to_add != del_count) { |
| 880 // If the slice needs to do a actually move elements after the insertion | 876 // If the slice needs to do a actually move elements after the insertion |
| 881 // point, then include those in the estimate of changed elements. | 877 // point, then include those in the estimate of changed elements. |
| 882 changed_elements += len - start_i - del_count; | 878 changed_elements += len - start_i - del_count; |
| 883 } | 879 } |
| 884 if (UseSparseVariant(array, len, IS_ARRAY(array), changed_elements)) { | 880 if (UseSparseVariant(array, len, IS_ARRAY(array), changed_elements)) { |
| (...skipping 783 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1668 if (i > length) i = length; | 1664 if (i > length) i = length; |
| 1669 } | 1665 } |
| 1670 | 1666 |
| 1671 if (end < 0) { | 1667 if (end < 0) { |
| 1672 end += length; | 1668 end += length; |
| 1673 if (end < 0) end = 0; | 1669 if (end < 0) end = 0; |
| 1674 } else { | 1670 } else { |
| 1675 if (end > length) end = length; | 1671 if (end > length) end = length; |
| 1676 } | 1672 } |
| 1677 | 1673 |
| 1678 if ((end - i) > 0 && ObjectIsFrozen(array)) { | 1674 if ((end - i) > 0 && %object_is_frozen(array)) { |
| 1679 throw MakeTypeError(kArrayFunctionsOnFrozen); | 1675 throw MakeTypeError(kArrayFunctionsOnFrozen); |
| 1680 } | 1676 } |
| 1681 | 1677 |
| 1682 for (; i < end; i++) | 1678 for (; i < end; i++) |
| 1683 array[i] = value; | 1679 array[i] = value; |
| 1684 return array; | 1680 return array; |
| 1685 } | 1681 } |
| 1686 | 1682 |
| 1687 | 1683 |
| 1688 // ES6, draft 04-05-14, section 22.1.3.6 | 1684 // ES6, draft 04-05-14, section 22.1.3.6 |
| (...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1964 %InstallToContext([ | 1960 %InstallToContext([ |
| 1965 "array_pop", ArrayPop, | 1961 "array_pop", ArrayPop, |
| 1966 "array_push", ArrayPush, | 1962 "array_push", ArrayPush, |
| 1967 "array_shift", ArrayShift, | 1963 "array_shift", ArrayShift, |
| 1968 "array_splice", ArraySplice, | 1964 "array_splice", ArraySplice, |
| 1969 "array_slice", ArraySlice, | 1965 "array_slice", ArraySlice, |
| 1970 "array_unshift", ArrayUnshift, | 1966 "array_unshift", ArrayUnshift, |
| 1971 ]); | 1967 ]); |
| 1972 | 1968 |
| 1973 }); | 1969 }); |
| OLD | NEW |