| 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 |
| (...skipping 982 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 993 | 993 |
| 994 | 994 |
| 995 function ArraySort(comparefn) { | 995 function ArraySort(comparefn) { |
| 996 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.sort"); | 996 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.sort"); |
| 997 | 997 |
| 998 var array = TO_OBJECT(this); | 998 var array = TO_OBJECT(this); |
| 999 var length = TO_LENGTH(array.length); | 999 var length = TO_LENGTH(array.length); |
| 1000 return InnerArraySort(array, length, comparefn); | 1000 return InnerArraySort(array, length, comparefn); |
| 1001 } | 1001 } |
| 1002 | 1002 |
| 1003 | |
| 1004 // The following functions cannot be made efficient on sparse arrays while | |
| 1005 // preserving the semantics, since the calls to the receiver function can add | |
| 1006 // or delete elements from the array. | |
| 1007 function InnerArrayFilter(f, receiver, array, length, result) { | |
| 1008 var result_length = 0; | |
| 1009 for (var i = 0; i < length; i++) { | |
| 1010 if (i in array) { | |
| 1011 var element = array[i]; | |
| 1012 if (%_Call(f, receiver, element, i, array)) { | |
| 1013 %CreateDataProperty(result, result_length, element); | |
| 1014 result_length++; | |
| 1015 } | |
| 1016 } | |
| 1017 } | |
| 1018 return result; | |
| 1019 } | |
| 1020 | |
| 1021 | |
| 1022 | |
| 1023 function ArrayFilter(f, receiver) { | |
| 1024 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.filter"); | |
| 1025 | |
| 1026 // Pull out the length so that modifications to the length in the | |
| 1027 // loop will not affect the looping and side effects are visible. | |
| 1028 var array = TO_OBJECT(this); | |
| 1029 var length = TO_LENGTH(array.length); | |
| 1030 if (!IS_CALLABLE(f)) throw %make_type_error(kCalledNonCallable, f); | |
| 1031 var result = ArraySpeciesCreate(array, 0); | |
| 1032 return InnerArrayFilter(f, receiver, array, length, result); | |
| 1033 } | |
| 1034 | |
| 1035 function ArrayMap(f, receiver) { | |
| 1036 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.map"); | |
| 1037 | |
| 1038 // Pull out the length so that modifications to the length in the | |
| 1039 // loop will not affect the looping and side effects are visible. | |
| 1040 var array = TO_OBJECT(this); | |
| 1041 var length = TO_LENGTH(array.length); | |
| 1042 if (!IS_CALLABLE(f)) throw %make_type_error(kCalledNonCallable, f); | |
| 1043 var result = ArraySpeciesCreate(array, length); | |
| 1044 for (var i = 0; i < length; i++) { | |
| 1045 if (i in array) { | |
| 1046 var element = array[i]; | |
| 1047 %CreateDataProperty(result, i, %_Call(f, receiver, element, i, array)); | |
| 1048 } | |
| 1049 } | |
| 1050 return result; | |
| 1051 } | |
| 1052 | |
| 1053 | |
| 1054 function ArrayLastIndexOf(element, index) { | 1003 function ArrayLastIndexOf(element, index) { |
| 1055 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.lastIndexOf"); | 1004 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.lastIndexOf"); |
| 1056 | 1005 |
| 1057 var array = this; | 1006 var array = this; |
| 1058 var length = TO_LENGTH(this.length); | 1007 var length = TO_LENGTH(this.length); |
| 1059 | 1008 |
| 1060 if (length == 0) return -1; | 1009 if (length == 0) return -1; |
| 1061 if (arguments.length < 2) { | 1010 if (arguments.length < 2) { |
| 1062 index = length - 1; | 1011 index = length - 1; |
| 1063 } else { | 1012 } else { |
| (...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1374 "toLocaleString", getFunction("toLocaleString", ArrayToLocaleString), | 1323 "toLocaleString", getFunction("toLocaleString", ArrayToLocaleString), |
| 1375 "join", getFunction("join", ArrayJoin), | 1324 "join", getFunction("join", ArrayJoin), |
| 1376 "pop", getFunction("pop", ArrayPop), | 1325 "pop", getFunction("pop", ArrayPop), |
| 1377 "push", getFunction("push", ArrayPush, 1), | 1326 "push", getFunction("push", ArrayPush, 1), |
| 1378 "reverse", getFunction("reverse", ArrayReverse), | 1327 "reverse", getFunction("reverse", ArrayReverse), |
| 1379 "shift", getFunction("shift", ArrayShift), | 1328 "shift", getFunction("shift", ArrayShift), |
| 1380 "unshift", getFunction("unshift", ArrayUnshift, 1), | 1329 "unshift", getFunction("unshift", ArrayUnshift, 1), |
| 1381 "slice", getFunction("slice", ArraySlice, 2), | 1330 "slice", getFunction("slice", ArraySlice, 2), |
| 1382 "splice", getFunction("splice", ArraySplice, 2), | 1331 "splice", getFunction("splice", ArraySplice, 2), |
| 1383 "sort", getFunction("sort", ArraySort), | 1332 "sort", getFunction("sort", ArraySort), |
| 1384 "filter", getFunction("filter", ArrayFilter, 1), | |
| 1385 "map", getFunction("map", ArrayMap, 1), | |
| 1386 "indexOf", getFunction("indexOf", null, 1), | 1333 "indexOf", getFunction("indexOf", null, 1), |
| 1387 "lastIndexOf", getFunction("lastIndexOf", ArrayLastIndexOf, 1), | 1334 "lastIndexOf", getFunction("lastIndexOf", ArrayLastIndexOf, 1), |
| 1388 "copyWithin", getFunction("copyWithin", ArrayCopyWithin, 2), | 1335 "copyWithin", getFunction("copyWithin", ArrayCopyWithin, 2), |
| 1389 "find", getFunction("find", ArrayFind, 1), | 1336 "find", getFunction("find", ArrayFind, 1), |
| 1390 "findIndex", getFunction("findIndex", ArrayFindIndex, 1), | 1337 "findIndex", getFunction("findIndex", ArrayFindIndex, 1), |
| 1391 "fill", getFunction("fill", ArrayFill, 1), | 1338 "fill", getFunction("fill", ArrayFill, 1), |
| 1392 "includes", getFunction("includes", null, 1), | 1339 "includes", getFunction("includes", null, 1), |
| 1393 "entries", IteratorFunctions.entries, | 1340 "entries", IteratorFunctions.entries, |
| 1394 "keys", IteratorFunctions.keys, | 1341 "keys", IteratorFunctions.keys, |
| 1395 iteratorSymbol, IteratorFunctions.values | 1342 iteratorSymbol, IteratorFunctions.values |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1432 | 1379 |
| 1433 // ------------------------------------------------------------------- | 1380 // ------------------------------------------------------------------- |
| 1434 // Exports | 1381 // Exports |
| 1435 | 1382 |
| 1436 utils.Export(function(to) { | 1383 utils.Export(function(to) { |
| 1437 to.ArrayFrom = ArrayFrom; | 1384 to.ArrayFrom = ArrayFrom; |
| 1438 to.ArrayJoin = ArrayJoin; | 1385 to.ArrayJoin = ArrayJoin; |
| 1439 to.ArrayPush = ArrayPush; | 1386 to.ArrayPush = ArrayPush; |
| 1440 to.ArrayToString = ArrayToString; | 1387 to.ArrayToString = ArrayToString; |
| 1441 to.ArrayValues = IteratorFunctions.values, | 1388 to.ArrayValues = IteratorFunctions.values, |
| 1442 to.InnerArrayFilter = InnerArrayFilter; | |
| 1443 to.InnerArrayFind = InnerArrayFind; | 1389 to.InnerArrayFind = InnerArrayFind; |
| 1444 to.InnerArrayFindIndex = InnerArrayFindIndex; | 1390 to.InnerArrayFindIndex = InnerArrayFindIndex; |
| 1445 to.InnerArrayJoin = InnerArrayJoin; | 1391 to.InnerArrayJoin = InnerArrayJoin; |
| 1446 to.InnerArraySort = InnerArraySort; | 1392 to.InnerArraySort = InnerArraySort; |
| 1447 to.InnerArrayToLocaleString = InnerArrayToLocaleString; | 1393 to.InnerArrayToLocaleString = InnerArrayToLocaleString; |
| 1448 }); | 1394 }); |
| 1449 | 1395 |
| 1450 %InstallToContext([ | 1396 %InstallToContext([ |
| 1451 "array_entries_iterator", IteratorFunctions.entries, | 1397 "array_entries_iterator", IteratorFunctions.entries, |
| 1452 "array_keys_iterator", IteratorFunctions.keys, | 1398 "array_keys_iterator", IteratorFunctions.keys, |
| 1453 "array_pop", ArrayPop, | 1399 "array_pop", ArrayPop, |
| 1454 "array_push", ArrayPush, | 1400 "array_push", ArrayPush, |
| 1455 "array_shift", ArrayShift, | 1401 "array_shift", ArrayShift, |
| 1456 "array_splice", ArraySplice, | 1402 "array_splice", ArraySplice, |
| 1457 "array_slice", ArraySlice, | 1403 "array_slice", ArraySlice, |
| 1458 "array_unshift", ArrayUnshift, | 1404 "array_unshift", ArrayUnshift, |
| 1459 "array_values_iterator", IteratorFunctions.values, | 1405 "array_values_iterator", IteratorFunctions.values, |
| 1460 ]); | 1406 ]); |
| 1461 | 1407 |
| 1462 }); | 1408 }); |
| OLD | NEW |