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; |
11 var $arrayUnshift; | 11 var $arrayUnshift; |
12 | 12 |
13 (function(global, utils) { | 13 (function(global, utils) { |
14 | 14 |
15 "use strict"; | 15 "use strict"; |
16 | 16 |
17 %CheckIsBootstrapping(); | 17 %CheckIsBootstrapping(); |
18 | 18 |
19 // ------------------------------------------------------------------- | 19 // ------------------------------------------------------------------- |
20 // Imports | 20 // Imports |
21 | 21 |
| 22 var Delete; |
22 var GlobalArray = global.Array; | 23 var GlobalArray = global.Array; |
23 var InternalArray = utils.InternalArray; | 24 var InternalArray = utils.InternalArray; |
24 var InternalPackedArray = utils.InternalPackedArray; | 25 var InternalPackedArray = utils.InternalPackedArray; |
25 | |
26 var Delete; | |
27 var MathMin; | 26 var MathMin; |
28 var ObjectHasOwnProperty; | 27 var ObjectHasOwnProperty; |
29 var ObjectIsFrozen; | 28 var ObjectIsFrozen; |
30 var ObjectIsSealed; | 29 var ObjectIsSealed; |
31 var ObjectToString; | 30 var ObjectToString; |
| 31 var ToNumber; |
| 32 var ToString; |
32 | 33 |
33 utils.Import(function(from) { | 34 utils.Import(function(from) { |
34 Delete = from.Delete; | 35 Delete = from.Delete; |
35 MathMin = from.MathMin; | 36 MathMin = from.MathMin; |
36 ObjectHasOwnProperty = from.ObjectHasOwnProperty; | 37 ObjectHasOwnProperty = from.ObjectHasOwnProperty; |
37 ObjectIsFrozen = from.ObjectIsFrozen; | 38 ObjectIsFrozen = from.ObjectIsFrozen; |
38 ObjectIsSealed = from.ObjectIsSealed; | 39 ObjectIsSealed = from.ObjectIsSealed; |
39 ObjectToString = from.ObjectToString; | 40 ObjectToString = from.ObjectToString; |
| 41 ToNumber = from.ToNumber; |
| 42 ToString = from.ToString; |
40 }); | 43 }); |
41 | 44 |
42 // ------------------------------------------------------------------- | 45 // ------------------------------------------------------------------- |
43 | 46 |
44 // Global list of arrays visited during toString, toLocaleString and | 47 // Global list of arrays visited during toString, toLocaleString and |
45 // join invocations. | 48 // join invocations. |
46 var visited_arrays = new InternalArray(); | 49 var visited_arrays = new InternalArray(); |
47 | 50 |
48 | 51 |
49 // Gets a sorted array of array keys. Useful for operations on sparse | 52 // Gets a sorted array of array keys. Useful for operations on sparse |
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
209 // matter what happens. | 212 // matter what happens. |
210 if (is_array) visited_arrays.length = visited_arrays.length - 1; | 213 if (is_array) visited_arrays.length = visited_arrays.length - 1; |
211 } | 214 } |
212 } | 215 } |
213 | 216 |
214 | 217 |
215 function ConvertToString(x) { | 218 function ConvertToString(x) { |
216 // Assumes x is a non-string. | 219 // Assumes x is a non-string. |
217 if (IS_NUMBER(x)) return %_NumberToString(x); | 220 if (IS_NUMBER(x)) return %_NumberToString(x); |
218 if (IS_BOOLEAN(x)) return x ? 'true' : 'false'; | 221 if (IS_BOOLEAN(x)) return x ? 'true' : 'false'; |
219 return (IS_NULL_OR_UNDEFINED(x)) ? '' : $toString($defaultString(x)); | 222 return (IS_NULL_OR_UNDEFINED(x)) ? '' : ToString($defaultString(x)); |
220 } | 223 } |
221 | 224 |
222 | 225 |
223 function ConvertToLocaleString(e) { | 226 function ConvertToLocaleString(e) { |
224 if (IS_NULL_OR_UNDEFINED(e)) { | 227 if (IS_NULL_OR_UNDEFINED(e)) { |
225 return ''; | 228 return ''; |
226 } else { | 229 } else { |
227 // According to ES5, section 15.4.4.3, the toLocaleString conversion | 230 // According to ES5, section 15.4.4.3, the toLocaleString conversion |
228 // must throw a TypeError if ToObject(e).toLocaleString isn't | 231 // must throw a TypeError if ToObject(e).toLocaleString isn't |
229 // callable. | 232 // callable. |
230 var e_obj = TO_OBJECT(e); | 233 var e_obj = TO_OBJECT(e); |
231 return $toString(e_obj.toLocaleString()); | 234 return ToString(e_obj.toLocaleString()); |
232 } | 235 } |
233 } | 236 } |
234 | 237 |
235 | 238 |
236 // This function implements the optimized splice implementation that can use | 239 // This function implements the optimized splice implementation that can use |
237 // special array operations to handle sparse arrays in a sensible fashion. | 240 // special array operations to handle sparse arrays in a sensible fashion. |
238 function SparseSlice(array, start_i, del_count, len, deleted_elements) { | 241 function SparseSlice(array, start_i, del_count, len, deleted_elements) { |
239 // Move deleted elements to a new array (the return value from splice). | 242 // Move deleted elements to a new array (the return value from splice). |
240 var indices = %GetArrayKeys(array, start_i + del_count); | 243 var indices = %GetArrayKeys(array, start_i + del_count); |
241 if (IS_NUMBER(indices)) { | 244 if (IS_NUMBER(indices)) { |
(...skipping 665 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
907 function InnerArraySort(length, comparefn) { | 910 function InnerArraySort(length, comparefn) { |
908 // In-place QuickSort algorithm. | 911 // In-place QuickSort algorithm. |
909 // For short (length <= 22) arrays, insertion sort is used for efficiency. | 912 // For short (length <= 22) arrays, insertion sort is used for efficiency. |
910 | 913 |
911 if (!IS_SPEC_FUNCTION(comparefn)) { | 914 if (!IS_SPEC_FUNCTION(comparefn)) { |
912 comparefn = function (x, y) { | 915 comparefn = function (x, y) { |
913 if (x === y) return 0; | 916 if (x === y) return 0; |
914 if (%_IsSmi(x) && %_IsSmi(y)) { | 917 if (%_IsSmi(x) && %_IsSmi(y)) { |
915 return %SmiLexicographicCompare(x, y); | 918 return %SmiLexicographicCompare(x, y); |
916 } | 919 } |
917 x = $toString(x); | 920 x = ToString(x); |
918 y = $toString(y); | 921 y = ToString(y); |
919 if (x == y) return 0; | 922 if (x == y) return 0; |
920 else return x < y ? -1 : 1; | 923 else return x < y ? -1 : 1; |
921 }; | 924 }; |
922 } | 925 } |
923 var InsertionSort = function InsertionSort(a, from, to) { | 926 var InsertionSort = function InsertionSort(a, from, to) { |
924 for (var i = from + 1; i < to; i++) { | 927 for (var i = from + 1; i < to; i++) { |
925 var element = a[i]; | 928 var element = a[i]; |
926 for (var j = i - 1; j >= from; j--) { | 929 for (var j = i - 1; j >= from; j--) { |
927 var tmp = a[j]; | 930 var tmp = a[j]; |
928 var order = %_CallFunction(UNDEFINED, tmp, element, comparefn); | 931 var order = %_CallFunction(UNDEFINED, tmp, element, comparefn); |
(...skipping 781 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1710 | 1713 |
1711 $arrayConcat = ArrayConcatJS; | 1714 $arrayConcat = ArrayConcatJS; |
1712 $arrayPush = ArrayPush; | 1715 $arrayPush = ArrayPush; |
1713 $arrayPop = ArrayPop; | 1716 $arrayPop = ArrayPop; |
1714 $arrayShift = ArrayShift; | 1717 $arrayShift = ArrayShift; |
1715 $arraySlice = ArraySlice; | 1718 $arraySlice = ArraySlice; |
1716 $arraySplice = ArraySplice; | 1719 $arraySplice = ArraySplice; |
1717 $arrayUnshift = ArrayUnshift; | 1720 $arrayUnshift = ArrayUnshift; |
1718 | 1721 |
1719 }); | 1722 }); |
OLD | NEW |