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

Side by Side Diff: src/v8natives.js

Issue 1121453003: Revert of Wrap v8natives.js into a function. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 7 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 | « src/uri.js ('k') | src/weak-collection.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 // 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 $delete; 5 // This file relies on the fact that the following declarations have been made
6 var $functionSourceString; 6 // in runtime.js:
7 var $getIterator; 7 // var $Object = global.Object;
8 var $getMethod; 8 // var $Boolean = global.Boolean;
9 var $globalEval; 9 // var $Number = global.Number;
10 var $installConstants; 10 // var $Function = global.Function;
11 var $installFunctions; 11 // var $Array = global.Array;
12 var $installGetter;
13 var $isFinite;
14 var $isNaN;
15 var $newFunctionString;
16 var $numberIsNaN;
17 var $objectDefineProperties;
18 var $objectDefineProperty;
19 var $objectFreeze;
20 var $objectGetOwnPropertyDescriptor;
21 var $objectGetOwnPropertyKeys;
22 var $objectHasOwnProperty;
23 var $objectIsFrozen;
24 var $objectIsSealed;
25 var $objectLookupGetter;
26 var $objectLookupSetter;
27 var $objectToString;
28 var $overrideFunction;
29 var $setFunctionName;
30 var $setUpLockedPrototype;
31 var $toCompletePropertyDescriptor;
32 var $toNameArray;
33 12
34 (function() { 13 var $isNaN = GlobalIsNaN;
35 14 var $isFinite = GlobalIsFinite;
36 %CheckIsBootstrapping();
37
38 var GlobalArray = global.Array;
39 var GlobalBoolean = global.Boolean;
40 var GlobalFunction = global.Function;
41 var GlobalNumber = global.Number;
42 var GlobalObject = global.Object;
43 15
44 // ---------------------------------------------------------------------------- 16 // ----------------------------------------------------------------------------
45 17
46 // ES6 - 9.2.11 SetFunctionName 18 // ES6 - 9.2.11 SetFunctionName
47 function SetFunctionName(f, name, prefix) { 19 function SetFunctionName(f, name, prefix) {
48 if (IS_SYMBOL(name)) { 20 if (IS_SYMBOL(name)) {
49 name = "[" + %SymbolDescription(name) + "]"; 21 name = "[" + %SymbolDescription(name) + "]";
50 } 22 }
51 if (IS_UNDEFINED(prefix)) { 23 if (IS_UNDEFINED(prefix)) {
52 %FunctionSetName(f, name); 24 %FunctionSetName(f, name);
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 var f = %CompileString(x, false); 188 var f = %CompileString(x, false);
217 if (!IS_FUNCTION(f)) return f; 189 if (!IS_FUNCTION(f)) return f;
218 190
219 return %_CallFunction(global_proxy, f); 191 return %_CallFunction(global_proxy, f);
220 } 192 }
221 193
222 194
223 // ---------------------------------------------------------------------------- 195 // ----------------------------------------------------------------------------
224 196
225 // Set up global object. 197 // Set up global object.
226 var attributes = DONT_ENUM | DONT_DELETE | READ_ONLY; 198 function SetUpGlobal() {
199 %CheckIsBootstrapping();
227 200
228 InstallConstants(global, [ 201 var attributes = DONT_ENUM | DONT_DELETE | READ_ONLY;
202
229 // ECMA 262 - 15.1.1.1. 203 // ECMA 262 - 15.1.1.1.
230 "NaN", NAN, 204 %AddNamedProperty(global, "NaN", NAN, attributes);
205
231 // ECMA-262 - 15.1.1.2. 206 // ECMA-262 - 15.1.1.2.
232 "Infinity", INFINITY, 207 %AddNamedProperty(global, "Infinity", INFINITY, attributes);
233 // ECMA-262 - 15.1.1.2.
234 "undefined", UNDEFINED,
235 ]);
236 208
237 // Set up non-enumerable function on the global object. 209 // ECMA-262 - 15.1.1.3.
238 InstallFunctions(global, DONT_ENUM, [ 210 %AddNamedProperty(global, "undefined", UNDEFINED, attributes);
239 "isNaN", GlobalIsNaN, 211
240 "isFinite", GlobalIsFinite, 212 // Set up non-enumerable function on the global object.
241 "parseInt", GlobalParseInt, 213 InstallFunctions(global, DONT_ENUM, [
242 "parseFloat", GlobalParseFloat, 214 "isNaN", GlobalIsNaN,
243 "eval", GlobalEval 215 "isFinite", GlobalIsFinite,
244 ]); 216 "parseInt", GlobalParseInt,
217 "parseFloat", GlobalParseFloat,
218 "eval", GlobalEval
219 ]);
220 }
221
222 SetUpGlobal();
245 223
246 224
247 // ---------------------------------------------------------------------------- 225 // ----------------------------------------------------------------------------
248 // Object 226 // Object
249 227
250 // ECMA-262 - 15.2.4.2 228 // ECMA-262 - 15.2.4.2
229 function NoSideEffectsObjectToString() {
230 if (IS_UNDEFINED(this) && !IS_UNDETECTABLE(this)) return "[object Undefined]";
231 if (IS_NULL(this)) return "[object Null]";
232 return "[object " + %_ClassOf(TO_OBJECT_INLINE(this)) + "]";
233 }
234
235
251 function ObjectToString() { 236 function ObjectToString() {
252 if (IS_UNDEFINED(this) && !IS_UNDETECTABLE(this)) return "[object Undefined]"; 237 if (IS_UNDEFINED(this) && !IS_UNDETECTABLE(this)) return "[object Undefined]";
253 if (IS_NULL(this)) return "[object Null]"; 238 if (IS_NULL(this)) return "[object Null]";
254 var O = TO_OBJECT_INLINE(this); 239 var O = TO_OBJECT_INLINE(this);
255 var builtinTag = %_ClassOf(O); 240 var builtinTag = %_ClassOf(O);
256 var tag; 241 var tag;
257 242
258 // TODO(caitp): cannot wait to get rid of this flag :> 243 // TODO(caitp): cannot wait to get rid of this flag :>
259 if (harmony_tostring) { 244 if (harmony_tostring) {
260 tag = O[symbolToStringTag]; 245 var tag = O[symbolToStringTag];
261 if (!IS_STRING(tag)) { 246 if (!IS_STRING(tag)) {
262 tag = builtinTag; 247 tag = builtinTag;
263 } 248 }
264 } else { 249 } else {
265 tag = builtinTag; 250 tag = builtinTag;
266 } 251 }
267 252
268 return `[object ${tag}]`; 253 return `[object ${tag}]`;
269 } 254 }
270 255
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
419 return { get: desc.getGet(), 404 return { get: desc.getGet(),
420 set: desc.getSet(), 405 set: desc.getSet(),
421 enumerable: desc.isEnumerable(), 406 enumerable: desc.isEnumerable(),
422 configurable: desc.isConfigurable() }; 407 configurable: desc.isConfigurable() };
423 } 408 }
424 409
425 410
426 // Harmony Proxies 411 // Harmony Proxies
427 function FromGenericPropertyDescriptor(desc) { 412 function FromGenericPropertyDescriptor(desc) {
428 if (IS_UNDEFINED(desc)) return desc; 413 if (IS_UNDEFINED(desc)) return desc;
429 var obj = new GlobalObject(); 414 var obj = new $Object();
430 415
431 if (desc.hasValue()) { 416 if (desc.hasValue()) {
432 %AddNamedProperty(obj, "value", desc.getValue(), NONE); 417 %AddNamedProperty(obj, "value", desc.getValue(), NONE);
433 } 418 }
434 if (desc.hasWritable()) { 419 if (desc.hasWritable()) {
435 %AddNamedProperty(obj, "writable", desc.isWritable(), NONE); 420 %AddNamedProperty(obj, "writable", desc.isWritable(), NONE);
436 } 421 }
437 if (desc.hasGetter()) { 422 if (desc.hasGetter()) {
438 %AddNamedProperty(obj, "get", desc.getGet(), NONE); 423 %AddNamedProperty(obj, "get", desc.getGet(), NONE);
439 } 424 }
(...skipping 608 matching lines...) Expand 10 before | Expand all | Expand 10 after
1048 return FromPropertyDescriptor(desc); 1033 return FromPropertyDescriptor(desc);
1049 } 1034 }
1050 1035
1051 1036
1052 // For Harmony proxies 1037 // For Harmony proxies
1053 function ToNameArray(obj, trap, includeSymbols) { 1038 function ToNameArray(obj, trap, includeSymbols) {
1054 if (!IS_SPEC_OBJECT(obj)) { 1039 if (!IS_SPEC_OBJECT(obj)) {
1055 throw MakeTypeError(kProxyNonObjectPropNames, trap, obj); 1040 throw MakeTypeError(kProxyNonObjectPropNames, trap, obj);
1056 } 1041 }
1057 var n = ToUint32(obj.length); 1042 var n = ToUint32(obj.length);
1058 var array = new GlobalArray(n); 1043 var array = new $Array(n);
1059 var realLength = 0; 1044 var realLength = 0;
1060 var names = { __proto__: null }; // TODO(rossberg): use sets once ready. 1045 var names = { __proto__: null }; // TODO(rossberg): use sets once ready.
1061 for (var index = 0; index < n; index++) { 1046 for (var index = 0; index < n; index++) {
1062 var s = ToName(obj[index]); 1047 var s = ToName(obj[index]);
1063 // TODO(rossberg): adjust once there is a story for symbols vs proxies. 1048 // TODO(rossberg): adjust once there is a story for symbols vs proxies.
1064 if (IS_SYMBOL(s) && !includeSymbols) continue; 1049 if (IS_SYMBOL(s) && !includeSymbols) continue;
1065 if (%HasOwnProperty(names, s)) { 1050 if (%HasOwnProperty(names, s)) {
1066 throw MakeTypeError(kProxyRepeatedPropName, trap, s); 1051 throw MakeTypeError(kProxyRepeatedPropName, trap, s);
1067 } 1052 }
1068 array[index] = s; 1053 array[index] = s;
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
1257 } 1242 }
1258 1243
1259 if (%IsJSFunctionProxy(obj)) { 1244 if (%IsJSFunctionProxy(obj)) {
1260 var callTrap = %GetCallTrap(obj); 1245 var callTrap = %GetCallTrap(obj);
1261 var constructTrap = %GetConstructTrap(obj); 1246 var constructTrap = %GetConstructTrap(obj);
1262 var code = $proxyDelegateCallAndConstruct(callTrap, constructTrap); 1247 var code = $proxyDelegateCallAndConstruct(callTrap, constructTrap);
1263 %Fix(obj); // becomes a regular function 1248 %Fix(obj); // becomes a regular function
1264 %SetCode(obj, code); 1249 %SetCode(obj, code);
1265 // TODO(rossberg): What about length and other properties? Not specified. 1250 // TODO(rossberg): What about length and other properties? Not specified.
1266 // We just put in some half-reasonable defaults for now. 1251 // We just put in some half-reasonable defaults for now.
1267 var prototype = new GlobalObject(); 1252 var prototype = new $Object();
1268 ObjectDefineProperty(prototype, "constructor", 1253 $Object.defineProperty(prototype, "constructor",
1269 {value: obj, writable: true, enumerable: false, configurable: true}); 1254 {value: obj, writable: true, enumerable: false, configurable: true});
1270 // TODO(v8:1530): defineProperty does not handle prototype and length. 1255 // TODO(v8:1530): defineProperty does not handle prototype and length.
1271 %FunctionSetPrototype(obj, prototype); 1256 %FunctionSetPrototype(obj, prototype);
1272 obj.length = 0; 1257 obj.length = 0;
1273 } else { 1258 } else {
1274 %Fix(obj); 1259 %Fix(obj);
1275 } 1260 }
1276 ObjectDefineProperties(obj, props); 1261 ObjectDefineProperties(obj, props);
1277 } 1262 }
1278 1263
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
1423 } else { 1408 } else {
1424 if (x == null) return { }; 1409 if (x == null) return { };
1425 return TO_OBJECT_INLINE(x); 1410 return TO_OBJECT_INLINE(x);
1426 } 1411 }
1427 } 1412 }
1428 1413
1429 1414
1430 // ---------------------------------------------------------------------------- 1415 // ----------------------------------------------------------------------------
1431 // Object 1416 // Object
1432 1417
1433 %SetNativeFlag(GlobalObject); 1418 function SetUpObject() {
1434 %SetCode(GlobalObject, ObjectConstructor); 1419 %CheckIsBootstrapping();
1435 1420
1436 %AddNamedProperty(GlobalObject.prototype, "constructor", GlobalObject, 1421 %SetNativeFlag($Object);
1437 DONT_ENUM); 1422 %SetCode($Object, ObjectConstructor);
1438 1423
1439 // Set up non-enumerable functions on the Object.prototype object. 1424 %AddNamedProperty($Object.prototype, "constructor", $Object, DONT_ENUM);
1440 InstallFunctions(GlobalObject.prototype, DONT_ENUM, [
1441 "toString", ObjectToString,
1442 "toLocaleString", ObjectToLocaleString,
1443 "valueOf", ObjectValueOf,
1444 "hasOwnProperty", ObjectHasOwnProperty,
1445 "isPrototypeOf", ObjectIsPrototypeOf,
1446 "propertyIsEnumerable", ObjectPropertyIsEnumerable,
1447 "__defineGetter__", ObjectDefineGetter,
1448 "__lookupGetter__", ObjectLookupGetter,
1449 "__defineSetter__", ObjectDefineSetter,
1450 "__lookupSetter__", ObjectLookupSetter
1451 ]);
1452 InstallGetterSetter(GlobalObject.prototype, "__proto__", ObjectGetProto,
1453 ObjectSetProto);
1454 1425
1455 // Set up non-enumerable functions in the Object object. 1426 // Set up non-enumerable functions on the Object.prototype object.
1456 InstallFunctions(GlobalObject, DONT_ENUM, [ 1427 InstallFunctions($Object.prototype, DONT_ENUM, [
1457 "keys", ObjectKeys, 1428 "toString", ObjectToString,
1458 "create", ObjectCreate, 1429 "toLocaleString", ObjectToLocaleString,
1459 "defineProperty", ObjectDefineProperty, 1430 "valueOf", ObjectValueOf,
1460 "defineProperties", ObjectDefineProperties, 1431 "hasOwnProperty", ObjectHasOwnProperty,
1461 "freeze", ObjectFreezeJS, 1432 "isPrototypeOf", ObjectIsPrototypeOf,
1462 "getPrototypeOf", ObjectGetPrototypeOf, 1433 "propertyIsEnumerable", ObjectPropertyIsEnumerable,
1463 "setPrototypeOf", ObjectSetPrototypeOf, 1434 "__defineGetter__", ObjectDefineGetter,
1464 "getOwnPropertyDescriptor", ObjectGetOwnPropertyDescriptor, 1435 "__lookupGetter__", ObjectLookupGetter,
1465 "getOwnPropertyNames", ObjectGetOwnPropertyNames, 1436 "__defineSetter__", ObjectDefineSetter,
1466 // getOwnPropertySymbols is added in symbol.js. 1437 "__lookupSetter__", ObjectLookupSetter
1467 "is", ObjectIs, 1438 ]);
1468 "isExtensible", ObjectIsExtensible, 1439 InstallGetterSetter($Object.prototype, "__proto__",
1469 "isFrozen", ObjectIsFrozen, 1440 ObjectGetProto, ObjectSetProto);
1470 "isSealed", ObjectIsSealed, 1441
1471 "preventExtensions", ObjectPreventExtension, 1442 // Set up non-enumerable functions in the Object object.
1472 "seal", ObjectSealJS 1443 InstallFunctions($Object, DONT_ENUM, [
1473 // deliverChangeRecords, getNotifier, observe and unobserve are added 1444 "keys", ObjectKeys,
1474 // in object-observe.js. 1445 "create", ObjectCreate,
1475 ]); 1446 "defineProperty", ObjectDefineProperty,
1447 "defineProperties", ObjectDefineProperties,
1448 "freeze", ObjectFreezeJS,
1449 "getPrototypeOf", ObjectGetPrototypeOf,
1450 "setPrototypeOf", ObjectSetPrototypeOf,
1451 "getOwnPropertyDescriptor", ObjectGetOwnPropertyDescriptor,
1452 "getOwnPropertyNames", ObjectGetOwnPropertyNames,
1453 // getOwnPropertySymbols is added in symbol.js.
1454 "is", ObjectIs,
1455 "isExtensible", ObjectIsExtensible,
1456 "isFrozen", ObjectIsFrozen,
1457 "isSealed", ObjectIsSealed,
1458 "preventExtensions", ObjectPreventExtension,
1459 "seal", ObjectSealJS
1460 // deliverChangeRecords, getNotifier, observe and unobserve are added
1461 // in object-observe.js.
1462 ]);
1463 }
1464
1465 SetUpObject();
1476 1466
1477 1467
1478 // ---------------------------------------------------------------------------- 1468 // ----------------------------------------------------------------------------
1479 // Boolean 1469 // Boolean
1480 1470
1481 function BooleanConstructor(x) { 1471 function BooleanConstructor(x) {
1482 if (%_IsConstructCall()) { 1472 if (%_IsConstructCall()) {
1483 %_SetValueOf(this, ToBoolean(x)); 1473 %_SetValueOf(this, ToBoolean(x));
1484 } else { 1474 } else {
1485 return ToBoolean(x); 1475 return ToBoolean(x);
(...skipping 20 matching lines...) Expand all
1506 // 'this'. This is not as dictated by ECMA-262. 1496 // 'this'. This is not as dictated by ECMA-262.
1507 if (!IS_BOOLEAN(this) && !IS_BOOLEAN_WRAPPER(this)) { 1497 if (!IS_BOOLEAN(this) && !IS_BOOLEAN_WRAPPER(this)) {
1508 throw MakeTypeError(kNotGeneric, 'Boolean.prototype.valueOf'); 1498 throw MakeTypeError(kNotGeneric, 'Boolean.prototype.valueOf');
1509 } 1499 }
1510 return %_ValueOf(this); 1500 return %_ValueOf(this);
1511 } 1501 }
1512 1502
1513 1503
1514 // ---------------------------------------------------------------------------- 1504 // ----------------------------------------------------------------------------
1515 1505
1516 %SetCode(GlobalBoolean, BooleanConstructor); 1506 function SetUpBoolean () {
1517 %FunctionSetPrototype(GlobalBoolean, new GlobalBoolean(false)); 1507 %CheckIsBootstrapping();
1518 %AddNamedProperty(GlobalBoolean.prototype, "constructor", GlobalBoolean,
1519 DONT_ENUM);
1520 1508
1521 InstallFunctions(GlobalBoolean.prototype, DONT_ENUM, [ 1509 %SetCode($Boolean, BooleanConstructor);
1522 "toString", BooleanToString, 1510 %FunctionSetPrototype($Boolean, new $Boolean(false));
1523 "valueOf", BooleanValueOf 1511 %AddNamedProperty($Boolean.prototype, "constructor", $Boolean, DONT_ENUM);
1524 ]); 1512
1513 InstallFunctions($Boolean.prototype, DONT_ENUM, [
1514 "toString", BooleanToString,
1515 "valueOf", BooleanValueOf
1516 ]);
1517 }
1518
1519 SetUpBoolean();
1525 1520
1526 1521
1527 // ---------------------------------------------------------------------------- 1522 // ----------------------------------------------------------------------------
1528 // Number 1523 // Number
1529 1524
1530 function NumberConstructor(x) { 1525 function NumberConstructor(x) {
1531 var value = %_ArgumentsLength() == 0 ? 0 : ToNumber(x); 1526 var value = %_ArgumentsLength() == 0 ? 0 : ToNumber(x);
1532 if (%_IsConstructCall()) { 1527 if (%_IsConstructCall()) {
1533 %_SetValueOf(this, value); 1528 %_SetValueOf(this, value);
1534 } else { 1529 } else {
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
1670 // Harmony isNaN. 1665 // Harmony isNaN.
1671 function NumberIsNaN(number) { 1666 function NumberIsNaN(number) {
1672 return IS_NUMBER(number) && NUMBER_IS_NAN(number); 1667 return IS_NUMBER(number) && NUMBER_IS_NAN(number);
1673 } 1668 }
1674 1669
1675 1670
1676 // Harmony isSafeInteger 1671 // Harmony isSafeInteger
1677 function NumberIsSafeInteger(number) { 1672 function NumberIsSafeInteger(number) {
1678 if (NumberIsFinite(number)) { 1673 if (NumberIsFinite(number)) {
1679 var integral = TO_INTEGER(number); 1674 var integral = TO_INTEGER(number);
1680 if (integral == number) { 1675 if (integral == number) return $abs(integral) <= $Number.MAX_SAFE_INTEGER;
1681 return $abs(integral) <= GlobalNumber.MAX_SAFE_INTEGER;
1682 }
1683 } 1676 }
1684 return false; 1677 return false;
1685 } 1678 }
1686 1679
1687 1680
1688 // ---------------------------------------------------------------------------- 1681 // ----------------------------------------------------------------------------
1689 1682
1690 %SetCode(GlobalNumber, NumberConstructor); 1683 function SetUpNumber() {
1691 %FunctionSetPrototype(GlobalNumber, new GlobalNumber(0)); 1684 %CheckIsBootstrapping();
1692 1685
1693 %OptimizeObjectForAddingMultipleProperties(GlobalNumber.prototype, 8); 1686 %SetCode($Number, NumberConstructor);
1694 // Set up the constructor property on the Number prototype object. 1687 %FunctionSetPrototype($Number, new $Number(0));
1695 %AddNamedProperty(GlobalNumber.prototype, "constructor", GlobalNumber,
1696 DONT_ENUM);
1697 1688
1698 InstallConstants(GlobalNumber, [ 1689 %OptimizeObjectForAddingMultipleProperties($Number.prototype, 8);
1699 // ECMA-262 section 15.7.3.1. 1690 // Set up the constructor property on the Number prototype object.
1700 "MAX_VALUE", 1.7976931348623157e+308, 1691 %AddNamedProperty($Number.prototype, "constructor", $Number, DONT_ENUM);
1701 // ECMA-262 section 15.7.3.2.
1702 "MIN_VALUE", 5e-324,
1703 // ECMA-262 section 15.7.3.3.
1704 "NaN", NAN,
1705 // ECMA-262 section 15.7.3.4.
1706 "NEGATIVE_INFINITY", -INFINITY,
1707 // ECMA-262 section 15.7.3.5.
1708 "POSITIVE_INFINITY", INFINITY,
1709 1692
1710 // --- Harmony constants (no spec refs until settled.) 1693 InstallConstants($Number, [
1694 // ECMA-262 section 15.7.3.1.
1695 "MAX_VALUE", 1.7976931348623157e+308,
1696 // ECMA-262 section 15.7.3.2.
1697 "MIN_VALUE", 5e-324,
1698 // ECMA-262 section 15.7.3.3.
1699 "NaN", NAN,
1700 // ECMA-262 section 15.7.3.4.
1701 "NEGATIVE_INFINITY", -INFINITY,
1702 // ECMA-262 section 15.7.3.5.
1703 "POSITIVE_INFINITY", INFINITY,
1711 1704
1712 "MAX_SAFE_INTEGER", %_MathPow(2, 53) - 1, 1705 // --- Harmony constants (no spec refs until settled.)
1713 "MIN_SAFE_INTEGER", -%_MathPow(2, 53) + 1,
1714 "EPSILON", %_MathPow(2, -52)
1715 ]);
1716 1706
1717 // Set up non-enumerable functions on the Number prototype object. 1707 "MAX_SAFE_INTEGER", %_MathPow(2, 53) - 1,
1718 InstallFunctions(GlobalNumber.prototype, DONT_ENUM, [ 1708 "MIN_SAFE_INTEGER", -%_MathPow(2, 53) + 1,
1719 "toString", NumberToStringJS, 1709 "EPSILON", %_MathPow(2, -52)
1720 "toLocaleString", NumberToLocaleString, 1710 ]);
1721 "valueOf", NumberValueOf,
1722 "toFixed", NumberToFixedJS,
1723 "toExponential", NumberToExponentialJS,
1724 "toPrecision", NumberToPrecisionJS
1725 ]);
1726 1711
1727 // Harmony Number constructor additions 1712 // Set up non-enumerable functions on the Number prototype object.
1728 InstallFunctions(GlobalNumber, DONT_ENUM, [ 1713 InstallFunctions($Number.prototype, DONT_ENUM, [
1729 "isFinite", NumberIsFinite, 1714 "toString", NumberToStringJS,
1730 "isInteger", NumberIsInteger, 1715 "toLocaleString", NumberToLocaleString,
1731 "isNaN", NumberIsNaN, 1716 "valueOf", NumberValueOf,
1732 "isSafeInteger", NumberIsSafeInteger, 1717 "toFixed", NumberToFixedJS,
1733 "parseInt", GlobalParseInt, 1718 "toExponential", NumberToExponentialJS,
1734 "parseFloat", GlobalParseFloat 1719 "toPrecision", NumberToPrecisionJS
1735 ]); 1720 ]);
1736 1721
1737 %SetInlineBuiltinFlag(NumberIsNaN); 1722 // Harmony Number constructor additions
1723 InstallFunctions($Number, DONT_ENUM, [
1724 "isFinite", NumberIsFinite,
1725 "isInteger", NumberIsInteger,
1726 "isNaN", NumberIsNaN,
1727 "isSafeInteger", NumberIsSafeInteger,
1728 "parseInt", GlobalParseInt,
1729 "parseFloat", GlobalParseFloat
1730 ]);
1731
1732 %SetInlineBuiltinFlag(NumberIsNaN);
1733 }
1734
1735 SetUpNumber();
1738 1736
1739 1737
1740 // ---------------------------------------------------------------------------- 1738 // ----------------------------------------------------------------------------
1741 // Function 1739 // Function
1742 1740
1743 function FunctionSourceString(func) { 1741 function FunctionSourceString(func) {
1744 while (%IsJSFunctionProxy(func)) { 1742 while (%IsJSFunctionProxy(func)) {
1745 func = %GetCallTrap(func); 1743 func = %GetCallTrap(func);
1746 } 1744 }
1747 1745
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
1837 // which are non-configurable. It therefore makes no sence to 1835 // which are non-configurable. It therefore makes no sence to
1838 // try to redefine these as defined by the spec. The spec says 1836 // try to redefine these as defined by the spec. The spec says
1839 // that bind should make these throw a TypeError if get or set 1837 // that bind should make these throw a TypeError if get or set
1840 // is called and make them non-enumerable and non-configurable. 1838 // is called and make them non-enumerable and non-configurable.
1841 // To be consistent with our normal functions we leave this as it is. 1839 // To be consistent with our normal functions we leave this as it is.
1842 // TODO(lrn): Do set these to be thrower. 1840 // TODO(lrn): Do set these to be thrower.
1843 return result; 1841 return result;
1844 } 1842 }
1845 1843
1846 1844
1847 function NewFunctionString(args, function_token) { 1845 function NewFunctionString(arguments, function_token) {
1848 var n = args.length; 1846 var n = arguments.length;
1849 var p = ''; 1847 var p = '';
1850 if (n > 1) { 1848 if (n > 1) {
1851 p = ToString(args[0]); 1849 p = ToString(arguments[0]);
1852 for (var i = 1; i < n - 1; i++) { 1850 for (var i = 1; i < n - 1; i++) {
1853 p += ',' + ToString(args[i]); 1851 p += ',' + ToString(arguments[i]);
1854 } 1852 }
1855 // If the formal parameters string include ) - an illegal 1853 // If the formal parameters string include ) - an illegal
1856 // character - it may make the combined function expression 1854 // character - it may make the combined function expression
1857 // compile. We avoid this problem by checking for this early on. 1855 // compile. We avoid this problem by checking for this early on.
1858 if (%_CallFunction(p, ')', $stringIndexOf) != -1) { 1856 if (%_CallFunction(p, ')', $stringIndexOf) != -1) {
1859 throw MakeSyntaxError(kParenthesisInArgString); 1857 throw MakeSyntaxError(kParenthesisInArgString);
1860 } 1858 }
1861 // If the formal parameters include an unbalanced block comment, the 1859 // If the formal parameters include an unbalanced block comment, the
1862 // function must be rejected. Since JavaScript does not allow nested 1860 // function must be rejected. Since JavaScript does not allow nested
1863 // comments we can include a trailing block comment to catch this. 1861 // comments we can include a trailing block comment to catch this.
1864 p += '\n/' + '**/'; 1862 p += '\n/' + '**/';
1865 } 1863 }
1866 var body = (n > 0) ? ToString(args[n - 1]) : ''; 1864 var body = (n > 0) ? ToString(arguments[n - 1]) : '';
1867 return '(' + function_token + '(' + p + ') {\n' + body + '\n})'; 1865 return '(' + function_token + '(' + p + ') {\n' + body + '\n})';
1868 } 1866 }
1869 1867
1870 1868
1871 function FunctionConstructor(arg1) { // length == 1 1869 function FunctionConstructor(arg1) { // length == 1
1872 var source = NewFunctionString(arguments, 'function'); 1870 var source = NewFunctionString(arguments, 'function');
1873 var global_proxy = %GlobalProxy(global); 1871 var global_proxy = %GlobalProxy(global);
1874 // Compile the string in the constructor and not a helper so that errors 1872 // Compile the string in the constructor and not a helper so that errors
1875 // appear to come from here. 1873 // appear to come from here.
1876 var f = %_CallFunction(global_proxy, %CompileString(source, true)); 1874 var f = %_CallFunction(global_proxy, %CompileString(source, true));
1877 %FunctionMarkNameShouldPrintAsAnonymous(f); 1875 %FunctionMarkNameShouldPrintAsAnonymous(f);
1878 return f; 1876 return f;
1879 } 1877 }
1880 1878
1881 1879
1882 // ---------------------------------------------------------------------------- 1880 // ----------------------------------------------------------------------------
1883 1881
1884 %SetCode(GlobalFunction, FunctionConstructor); 1882 function SetUpFunction() {
1885 %AddNamedProperty(GlobalFunction.prototype, "constructor", GlobalFunction, 1883 %CheckIsBootstrapping();
1886 DONT_ENUM);
1887 1884
1888 InstallFunctions(GlobalFunction.prototype, DONT_ENUM, [ 1885 %SetCode($Function, FunctionConstructor);
1889 "bind", FunctionBind, 1886 %AddNamedProperty($Function.prototype, "constructor", $Function, DONT_ENUM);
1890 "toString", FunctionToString 1887
1891 ]); 1888 InstallFunctions($Function.prototype, DONT_ENUM, [
1889 "bind", FunctionBind,
1890 "toString", FunctionToString
1891 ]);
1892 }
1893
1894 SetUpFunction();
1895
1892 1896
1893 // ---------------------------------------------------------------------------- 1897 // ----------------------------------------------------------------------------
1894 // Iterator related spec functions. 1898 // Iterator related spec functions.
1895 1899
1896 // ES6 rev 33, 2015-02-12 1900 // ES6 rev 33, 2015-02-12
1897 // 7.4.1 GetIterator ( obj, method ) 1901 // 7.4.1 GetIterator ( obj, method )
1898 function GetIterator(obj, method) { 1902 function GetIterator(obj, method) {
1899 if (IS_UNDEFINED(method)) { 1903 if (IS_UNDEFINED(method)) {
1900 method = obj[symbolIterator]; 1904 method = obj[symbolIterator];
1901 } 1905 }
1902 if (!IS_SPEC_FUNCTION(method)) { 1906 if (!IS_SPEC_FUNCTION(method)) {
1903 throw MakeTypeError(kNotIterable, obj); 1907 throw MakeTypeError(kNotIterable, obj);
1904 } 1908 }
1905 var iterator = %_CallFunction(obj, method); 1909 var iterator = %_CallFunction(obj, method);
1906 if (!IS_SPEC_OBJECT(iterator)) { 1910 if (!IS_SPEC_OBJECT(iterator)) {
1907 throw MakeTypeError(kNotAnIterator, iterator); 1911 throw MakeTypeError(kNotAnIterator, iterator);
1908 } 1912 }
1909 return iterator; 1913 return iterator;
1910 } 1914 }
1911
1912 //----------------------------------------------------------------------------
1913
1914 $delete = Delete;
1915 $functionSourceString = FunctionSourceString;
1916 $getIterator = GetIterator;
1917 $getMethod = GetMethod;
1918 $globalEval = GlobalEval;
1919 $installConstants = InstallConstants;
1920 $installFunctions = InstallFunctions;
1921 $installGetter = InstallGetter;
1922 $isFinite = GlobalIsFinite;
1923 $isNaN = GlobalIsNaN;
1924 $newFunctionString = NewFunctionString;
1925 $numberIsNaN = NumberIsNaN;
1926 $objectDefineProperties = ObjectDefineProperties;
1927 $objectDefineProperty = ObjectDefineProperty;
1928 $objectFreeze = ObjectFreezeJS;
1929 $objectGetOwnPropertyDescriptor = ObjectGetOwnPropertyDescriptor;
1930 $objectGetOwnPropertyKeys = ObjectGetOwnPropertyKeys;
1931 $objectHasOwnProperty = ObjectHasOwnProperty;
1932 $objectIsFrozen = ObjectIsFrozen;
1933 $objectIsSealed = ObjectIsSealed;
1934 $objectLookupGetter = ObjectLookupGetter;
1935 $objectLookupSetter = ObjectLookupSetter;
1936 $objectToString = ObjectToString;
1937 $overrideFunction = OverrideFunction;
1938 $setFunctionName = SetFunctionName;
1939 $setUpLockedPrototype = SetUpLockedPrototype;
1940 $toCompletePropertyDescriptor = ToCompletePropertyDescriptor;
1941 $toNameArray = ToNameArray;
1942
1943 })();
OLDNEW
« no previous file with comments | « src/uri.js ('k') | src/weak-collection.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698