Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4)

Side by Side Diff: src/js/array.js

Issue 2663033003: [builtins] TurboFan version of Array.prototype.forEach including fast path for FAST_ELEMENTS (Closed)
Patch Set: Rebase on ToT Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 1502 matching lines...) Expand 10 before | Expand all | Expand 10 after
1513 1513
1514 %FunctionSetLength(ArrayFrom, 1); 1514 %FunctionSetLength(ArrayFrom, 1);
1515 1515
1516 // Set up non-enumerable functions on the Array object. 1516 // Set up non-enumerable functions on the Array object.
1517 utils.InstallFunctions(GlobalArray, DONT_ENUM, [ 1517 utils.InstallFunctions(GlobalArray, DONT_ENUM, [
1518 "from", ArrayFrom, 1518 "from", ArrayFrom,
1519 "of", ArrayOf 1519 "of", ArrayOf
1520 ]); 1520 ]);
1521 1521
1522 var specialFunctions = %SpecialArrayFunctions(); 1522 var specialFunctions = %SpecialArrayFunctions();
1523 var specialExperimentalArrayFunctions = null;
1523 1524
1524 function getFunction(name, jsBuiltin, len) { 1525 function getFunction(name, jsBuiltin, len) {
1525 var f = jsBuiltin; 1526 var f = jsBuiltin;
1526 if (specialFunctions.hasOwnProperty(name)) { 1527 if (specialFunctions.hasOwnProperty(name)) {
1527 f = specialFunctions[name]; 1528 f = specialFunctions[name];
1529 } else if (specialExperimentalArrayFunctions != null &&
1530 specialExperimentalArrayFunctions.hasOwnProperty(name)) {
1531 f = specialExperimentalArrayFunctions[name];
1528 } 1532 }
1529 if (!IS_UNDEFINED(len)) { 1533 if (!IS_UNDEFINED(len)) {
1530 %FunctionSetLength(f, len); 1534 %FunctionSetLength(f, len);
1531 } 1535 }
1532 return f; 1536 return f;
1533 }; 1537 };
1534 1538
1535 var ArrayValues = getFunction("values", null, 0); 1539 var ArrayValues = getFunction("values", null, 0);
1536 1540
1537 // Set up non-enumerable functions of the Array.prototype object and 1541 // Set up non-enumerable functions of the Array.prototype object and
1538 // set their names. 1542 // set their names.
1539 // Manipulate the length of some of the functions to meet 1543 // Manipulate the length of some of the functions to meet
1540 // expectations set by ECMA-262 or Mozilla. 1544 // expectations set by ECMA-262 or Mozilla.
1541 utils.InstallFunctions(GlobalArray.prototype, DONT_ENUM, [ 1545 utils.InstallFunctions(GlobalArray.prototype, DONT_ENUM, [
1542 "toString", getFunction("toString", ArrayToString), 1546 "toString", getFunction("toString", ArrayToString),
1543 "toLocaleString", getFunction("toLocaleString", ArrayToLocaleString), 1547 "toLocaleString", getFunction("toLocaleString", ArrayToLocaleString),
1544 "join", getFunction("join", ArrayJoin), 1548 "join", getFunction("join", ArrayJoin),
1545 "pop", getFunction("pop", ArrayPop), 1549 "pop", getFunction("pop", ArrayPop),
1546 "push", getFunction("push", ArrayPush, 1), 1550 "push", getFunction("push", ArrayPush, 1),
1547 "reverse", getFunction("reverse", ArrayReverse), 1551 "reverse", getFunction("reverse", ArrayReverse),
1548 "shift", getFunction("shift", ArrayShift), 1552 "shift", getFunction("shift", ArrayShift),
1549 "unshift", getFunction("unshift", ArrayUnshift, 1), 1553 "unshift", getFunction("unshift", ArrayUnshift, 1),
1550 "slice", getFunction("slice", ArraySlice, 2), 1554 "slice", getFunction("slice", ArraySlice, 2),
1551 "splice", getFunction("splice", ArraySplice, 2), 1555 "splice", getFunction("splice", ArraySplice, 2),
1552 "sort", getFunction("sort", ArraySort), 1556 "sort", getFunction("sort", ArraySort),
1553 "filter", getFunction("filter", ArrayFilter, 1), 1557 "filter", getFunction("filter", ArrayFilter, 1),
1554 "forEach", getFunction("forEach", ArrayForEach, 1),
1555 "some", getFunction("some", ArraySome, 1), 1558 "some", getFunction("some", ArraySome, 1),
1556 "every", getFunction("every", ArrayEvery, 1), 1559 "every", getFunction("every", ArrayEvery, 1),
1557 "map", getFunction("map", ArrayMap, 1), 1560 "map", getFunction("map", ArrayMap, 1),
1558 "indexOf", getFunction("indexOf", null, 1), 1561 "indexOf", getFunction("indexOf", null, 1),
1559 "lastIndexOf", getFunction("lastIndexOf", ArrayLastIndexOf, 1), 1562 "lastIndexOf", getFunction("lastIndexOf", ArrayLastIndexOf, 1),
1560 "reduce", getFunction("reduce", ArrayReduce, 1), 1563 "reduce", getFunction("reduce", ArrayReduce, 1),
1561 "reduceRight", getFunction("reduceRight", ArrayReduceRight, 1), 1564 "reduceRight", getFunction("reduceRight", ArrayReduceRight, 1),
1562 "copyWithin", getFunction("copyWithin", ArrayCopyWithin, 2), 1565 "copyWithin", getFunction("copyWithin", ArrayCopyWithin, 2),
1563 "find", getFunction("find", ArrayFind, 1), 1566 "find", getFunction("find", ArrayFind, 1),
1564 "findIndex", getFunction("findIndex", ArrayFindIndex, 1), 1567 "findIndex", getFunction("findIndex", ArrayFindIndex, 1),
1565 "fill", getFunction("fill", ArrayFill, 1), 1568 "fill", getFunction("fill", ArrayFill, 1),
1566 "includes", getFunction("includes", null, 1), 1569 "includes", getFunction("includes", null, 1),
1567 "keys", getFunction("keys", null, 0), 1570 "keys", getFunction("keys", null, 0),
1568 "entries", getFunction("entries", null, 0), 1571 "entries", getFunction("entries", null, 0),
1569 iteratorSymbol, ArrayValues 1572 iteratorSymbol, ArrayValues
1570 ]); 1573 ]);
1571 1574
1575 %FunctionRemovePrototype(ArrayForEach);
1576
1577 var specialExperimentalArrayFunctions = null;
1578
1579 function InstallExperimentalArrayFunctions() {
1580 specialExperimentalArrayFunctions = %SpecialExperimentalArrayFunctions();
Yang 2017/02/02 10:04:58 Can we have all of this in C++, in the bootstrappe
danno 2017/02/02 17:15:48 Done.
1581 utils.InstallFunctions(global.Array.prototype, DONT_ENUM, [
1582 "forEach", getFunction("forEach", ArrayForEach, 1),
1583 ], false);
1584 }
1585
1572 %FunctionSetName(ArrayValues, "values"); 1586 %FunctionSetName(ArrayValues, "values");
1573 1587
1574 %FinishArrayPrototypeSetup(GlobalArray.prototype); 1588 %FinishArrayPrototypeSetup(GlobalArray.prototype);
1575 1589
1576 // The internal Array prototype doesn't need to be fancy, since it's never 1590 // The internal Array prototype doesn't need to be fancy, since it's never
1577 // exposed to user code. 1591 // exposed to user code.
1578 // Adding only the functions that are actually used. 1592 // Adding only the functions that are actually used.
1579 utils.SetUpLockedPrototype(InternalArray, GlobalArray(), [ 1593 utils.SetUpLockedPrototype(InternalArray, GlobalArray(), [
1580 "indexOf", getFunction("indexOf", null), 1594 "indexOf", getFunction("indexOf", null),
1581 "join", getFunction("join", ArrayJoin), 1595 "join", getFunction("join", ArrayJoin),
(...skipping 22 matching lines...) Expand all
1604 "slice", getFunction("slice", ArraySlice) 1618 "slice", getFunction("slice", ArraySlice)
1605 ]); 1619 ]);
1606 1620
1607 // ------------------------------------------------------------------- 1621 // -------------------------------------------------------------------
1608 // Exports 1622 // Exports
1609 1623
1610 utils.Export(function(to) { 1624 utils.Export(function(to) {
1611 to.ArrayFrom = ArrayFrom; 1625 to.ArrayFrom = ArrayFrom;
1612 to.ArrayJoin = ArrayJoin; 1626 to.ArrayJoin = ArrayJoin;
1613 to.ArrayPush = ArrayPush; 1627 to.ArrayPush = ArrayPush;
1628 to.InstallExperimentalArrayFunctions = InstallExperimentalArrayFunctions;
1614 to.ArrayToString = ArrayToString; 1629 to.ArrayToString = ArrayToString;
1615 to.ArrayValues = ArrayValues; 1630 to.ArrayValues = ArrayValues;
1616 to.InnerArrayCopyWithin = InnerArrayCopyWithin; 1631 to.InnerArrayCopyWithin = InnerArrayCopyWithin;
1617 to.InnerArrayEvery = InnerArrayEvery; 1632 to.InnerArrayEvery = InnerArrayEvery;
1618 to.InnerArrayFill = InnerArrayFill; 1633 to.InnerArrayFill = InnerArrayFill;
1619 to.InnerArrayFilter = InnerArrayFilter; 1634 to.InnerArrayFilter = InnerArrayFilter;
1620 to.InnerArrayFind = InnerArrayFind; 1635 to.InnerArrayFind = InnerArrayFind;
1621 to.InnerArrayFindIndex = InnerArrayFindIndex; 1636 to.InnerArrayFindIndex = InnerArrayFindIndex;
1622 to.InnerArrayForEach = InnerArrayForEach; 1637 to.InnerArrayForEach = InnerArrayForEach;
1623 to.InnerArrayJoin = InnerArrayJoin; 1638 to.InnerArrayJoin = InnerArrayJoin;
(...skipping 10 matching lines...) Expand all
1634 "array_pop", ArrayPop, 1649 "array_pop", ArrayPop,
1635 "array_push", ArrayPush, 1650 "array_push", ArrayPush,
1636 "array_shift", ArrayShift, 1651 "array_shift", ArrayShift,
1637 "array_splice", ArraySplice, 1652 "array_splice", ArraySplice,
1638 "array_slice", ArraySlice, 1653 "array_slice", ArraySlice,
1639 "array_unshift", ArrayUnshift, 1654 "array_unshift", ArrayUnshift,
1640 "array_values_iterator", ArrayValues, 1655 "array_values_iterator", ArrayValues,
1641 ]); 1656 ]);
1642 1657
1643 }); 1658 });
OLDNEW
« src/builtins/builtins-array.cc ('K') | « src/flag-definitions.h ('k') | src/js/prologue.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698