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

Side by Side Diff: src/v8natives.js

Issue 124573002: Upgrade Number constructor to ES6. (Closed) Base URL: git://github.com/v8/v8.git@bleeding_edge
Patch Set: Various code improvements Created 6 years, 11 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
« no previous file with comments | « no previous file | test/mjsunit/math-floor-part1.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 %FunctionSetName(getter, name); 72 %FunctionSetName(getter, name);
73 %FunctionSetName(setter, name); 73 %FunctionSetName(setter, name);
74 %FunctionRemovePrototype(getter); 74 %FunctionRemovePrototype(getter);
75 %FunctionRemovePrototype(setter); 75 %FunctionRemovePrototype(setter);
76 %DefineOrRedefineAccessorProperty(object, name, getter, setter, DONT_ENUM); 76 %DefineOrRedefineAccessorProperty(object, name, getter, setter, DONT_ENUM);
77 %SetNativeFlag(getter); 77 %SetNativeFlag(getter);
78 %SetNativeFlag(setter); 78 %SetNativeFlag(setter);
79 } 79 }
80 80
81 81
82 // Helper function for installing constant properties on objects.
83 function InstallConstants(object, constants) {
84 if (constants.length >= 4) {
85 %OptimizeObjectForAddingMultipleProperties(object, constants.length >> 1);
86 }
87 var attributes = DONT_ENUM | DONT_DELETE | READ_ONLY;
88 for (var i = 0; i < constants.length; i += 2) {
89 var name = constants[i];
90 var k = constants[i + 1];
91 %SetProperty(object, name, k, attributes);
92 }
93 %ToFastProperties(object);
94 }
95
96
82 // Prevents changes to the prototype of a built-in function. 97 // Prevents changes to the prototype of a built-in function.
83 // The "prototype" property of the function object is made non-configurable, 98 // The "prototype" property of the function object is made non-configurable,
84 // and the prototype object is made non-extensible. The latter prevents 99 // and the prototype object is made non-extensible. The latter prevents
85 // changing the __proto__ property. 100 // changing the __proto__ property.
86 function SetUpLockedPrototype(constructor, fields, methods) { 101 function SetUpLockedPrototype(constructor, fields, methods) {
87 %CheckIsBootstrapping(); 102 %CheckIsBootstrapping();
88 var prototype = constructor.prototype; 103 var prototype = constructor.prototype;
89 // Install functions first, because this function is used to initialize 104 // Install functions first, because this function is used to initialize
90 // PropertyDescriptor itself. 105 // PropertyDescriptor itself.
91 var property_count = (methods.length >> 1) + (fields ? fields.length : 0); 106 var property_count = (methods.length >> 1) + (fields ? fields.length : 0);
(...skipping 1525 matching lines...) Expand 10 before | Expand all | Expand 10 after
1617 return %NumberToPrecision(x, p); 1632 return %NumberToPrecision(x, p);
1618 } 1633 }
1619 1634
1620 1635
1621 // Harmony isFinite. 1636 // Harmony isFinite.
1622 function NumberIsFinite(number) { 1637 function NumberIsFinite(number) {
1623 return IS_NUMBER(number) && NUMBER_IS_FINITE(number); 1638 return IS_NUMBER(number) && NUMBER_IS_FINITE(number);
1624 } 1639 }
1625 1640
1626 1641
1642 // Harmony isInteger
1643 function NumberIsInteger(number) {
1644 return NumberIsFinite(number) && TO_INTEGER(number) == number;
1645 }
1646
1647
1627 // Harmony isNaN. 1648 // Harmony isNaN.
1628 function NumberIsNaN(number) { 1649 function NumberIsNaN(number) {
1629 return IS_NUMBER(number) && NUMBER_IS_NAN(number); 1650 return IS_NUMBER(number) && NUMBER_IS_NAN(number);
1630 } 1651 }
1631 1652
1632 1653
1654 // Harmony isSafeInteger
1655 function NumberIsSafeInteger(number) {
1656 if (NumberIsFinite(number)) {
1657 var integral = TO_INTEGER(number);
1658 if (integral == number)
1659 return MathAbs(integral) <= $Number.MAX_SAFE_INTEGER;
1660 }
1661 return false;
1662 }
1663
1664
1633 // ---------------------------------------------------------------------------- 1665 // ----------------------------------------------------------------------------
1634 1666
1635 function SetUpNumber() { 1667 function SetUpNumber() {
1636 %CheckIsBootstrapping(); 1668 %CheckIsBootstrapping();
1637 1669
1638 %SetCode($Number, NumberConstructor); 1670 %SetCode($Number, NumberConstructor);
1639 %FunctionSetPrototype($Number, new $Number(0)); 1671 %FunctionSetPrototype($Number, new $Number(0));
1640 1672
1641 %OptimizeObjectForAddingMultipleProperties($Number.prototype, 8); 1673 %OptimizeObjectForAddingMultipleProperties($Number.prototype, 8);
1642 // Set up the constructor property on the Number prototype object. 1674 // Set up the constructor property on the Number prototype object.
1643 %SetProperty($Number.prototype, "constructor", $Number, DONT_ENUM); 1675 %SetProperty($Number.prototype, "constructor", $Number, DONT_ENUM);
1644 1676
1645 %OptimizeObjectForAddingMultipleProperties($Number, 5); 1677 InstallConstants($Number, $Array(
1646 // ECMA-262 section 15.7.3.1. 1678 // ECMA-262 section 15.7.3.1.
1647 %SetProperty($Number, 1679 "MAX_VALUE", 1.7976931348623157e+308,
1648 "MAX_VALUE", 1680 // ECMA-262 section 15.7.3.2.
1649 1.7976931348623157e+308, 1681 "MIN_VALUE", 5e-324,
1650 DONT_ENUM | DONT_DELETE | READ_ONLY); 1682 // ECMA-262 section 15.7.3.3.
1683 "NaN", NAN,
1684 // ECMA-262 section 15.7.3.4.
1685 "NEGATIVE_INFINITY", -INFINITY,
1686 // ECMA-262 section 15.7.3.5.
1687 "POSITIVE_INFINITY", INFINITY,
1651 1688
1652 // ECMA-262 section 15.7.3.2. 1689 // --- Harmony constants (no spec refs until settled.)
1653 %SetProperty($Number, "MIN_VALUE", 5e-324,
1654 DONT_ENUM | DONT_DELETE | READ_ONLY);
1655 1690
1656 // ECMA-262 section 15.7.3.3. 1691 "MAX_SAFE_INTEGER", %_MathPow(2, 53) - 1,
1657 %SetProperty($Number, "NaN", NAN, DONT_ENUM | DONT_DELETE | READ_ONLY); 1692 "MIN_SAFE_INTEGER", -%_MathPow(2, 53) + 1,
1658 1693 "EPSILON", %_MathPow(2, -52)
1659 // ECMA-262 section 15.7.3.4. 1694 ));
1660 %SetProperty($Number,
1661 "NEGATIVE_INFINITY",
1662 -INFINITY,
1663 DONT_ENUM | DONT_DELETE | READ_ONLY);
1664
1665 // ECMA-262 section 15.7.3.5.
1666 %SetProperty($Number,
1667 "POSITIVE_INFINITY",
1668 INFINITY,
1669 DONT_ENUM | DONT_DELETE | READ_ONLY);
1670 %ToFastProperties($Number);
1671 1695
1672 // Set up non-enumerable functions on the Number prototype object. 1696 // Set up non-enumerable functions on the Number prototype object.
1673 InstallFunctions($Number.prototype, DONT_ENUM, $Array( 1697 InstallFunctions($Number.prototype, DONT_ENUM, $Array(
1674 "toString", NumberToString, 1698 "toString", NumberToString,
1675 "toLocaleString", NumberToLocaleString, 1699 "toLocaleString", NumberToLocaleString,
1676 "valueOf", NumberValueOf, 1700 "valueOf", NumberValueOf,
1677 "toFixed", NumberToFixed, 1701 "toFixed", NumberToFixed,
1678 "toExponential", NumberToExponential, 1702 "toExponential", NumberToExponential,
1679 "toPrecision", NumberToPrecision 1703 "toPrecision", NumberToPrecision
1680 )); 1704 ));
1705
1706 // Harmony Number constructor additions
1681 InstallFunctions($Number, DONT_ENUM, $Array( 1707 InstallFunctions($Number, DONT_ENUM, $Array(
1682 "isFinite", NumberIsFinite, 1708 "isFinite", NumberIsFinite,
1683 "isNaN", NumberIsNaN 1709 "isInteger", NumberIsInteger,
1710 "isNaN", NumberIsNaN,
1711 "isSafeInteger", NumberIsSafeInteger,
1712 "parseInt", GlobalParseInt,
1713 "parseFloat", GlobalParseFloat
1684 )); 1714 ));
1685 } 1715 }
1686 1716
1687 SetUpNumber(); 1717 SetUpNumber();
1688 1718
1689 1719
1690 // ---------------------------------------------------------------------------- 1720 // ----------------------------------------------------------------------------
1691 // Function 1721 // Function
1692 1722
1693 function FunctionSourceString(func) { 1723 function FunctionSourceString(func) {
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
1844 // Eventually, we should move to a real event queue that allows to maintain 1874 // Eventually, we should move to a real event queue that allows to maintain
1845 // relative ordering of different kinds of tasks. 1875 // relative ordering of different kinds of tasks.
1846 1876
1847 RunMicrotasks.runners = new InternalArray; 1877 RunMicrotasks.runners = new InternalArray;
1848 1878
1849 function RunMicrotasks() { 1879 function RunMicrotasks() {
1850 while (%SetMicrotaskPending(false)) { 1880 while (%SetMicrotaskPending(false)) {
1851 for (var i in RunMicrotasks.runners) RunMicrotasks.runners[i](); 1881 for (var i in RunMicrotasks.runners) RunMicrotasks.runners[i]();
1852 } 1882 }
1853 } 1883 }
OLDNEW
« no previous file with comments | « no previous file | test/mjsunit/math-floor-part1.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698