| 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 $delete; |
| 5 var $functionSourceString; | 6 var $functionSourceString; |
| 7 var $getIterator; |
| 8 var $getMethod; |
| 6 var $globalEval; | 9 var $globalEval; |
| 10 var $installConstants; |
| 11 var $installFunctions; |
| 12 var $installGetter; |
| 13 var $isFinite; |
| 14 var $isNaN; |
| 15 var $newFunctionString; |
| 16 var $numberIsNaN; |
| 17 var $objectDefineProperties; |
| 18 var $objectDefineProperty; |
| 19 var $objectFreeze; |
| 7 var $objectGetOwnPropertyDescriptor; | 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 $ownPropertyKeys; |
| 30 var $setFunctionName; |
| 31 var $setUpLockedPrototype; |
| 8 var $toCompletePropertyDescriptor; | 32 var $toCompletePropertyDescriptor; |
| 33 var $toNameArray; |
| 9 | 34 |
| 10 (function(global, utils) { | 35 (function(global, utils) { |
| 11 | 36 |
| 12 %CheckIsBootstrapping(); | 37 %CheckIsBootstrapping(); |
| 13 | 38 |
| 14 // ---------------------------------------------------------------------------- | 39 // ---------------------------------------------------------------------------- |
| 15 // Imports | 40 // Imports |
| 16 | 41 |
| 17 var GlobalArray = global.Array; | 42 var GlobalArray = global.Array; |
| 18 var GlobalBoolean = global.Boolean; | 43 var GlobalBoolean = global.Boolean; |
| 19 var GlobalFunction = global.Function; | 44 var GlobalFunction = global.Function; |
| 20 var GlobalNumber = global.Number; | 45 var GlobalNumber = global.Number; |
| 21 var GlobalObject = global.Object; | 46 var GlobalObject = global.Object; |
| 22 var InternalArray = utils.InternalArray; | 47 var InternalArray = utils.InternalArray; |
| 23 | 48 |
| 24 var MathAbs; | 49 var MathAbs; |
| 25 var ProxyDelegateCallAndConstruct; | |
| 26 var ProxyDerivedHasOwnTrap; | |
| 27 var ProxyDerivedKeysTrap; | |
| 28 var StringIndexOf; | 50 var StringIndexOf; |
| 29 | 51 |
| 30 utils.Import(function(from) { | 52 utils.Import(function(from) { |
| 31 MathAbs = from.MathAbs; | 53 MathAbs = from.MathAbs; |
| 32 StringIndexOf = from.StringIndexOf; | 54 StringIndexOf = from.StringIndexOf; |
| 33 }); | 55 }); |
| 34 | 56 |
| 35 utils.ImportFromExperimental(function(from) { | |
| 36 ProxyDelegateCallAndConstruct = from.ProxyDelegateCallAndConstruct; | |
| 37 ProxyDerivedHasOwnTrap = from.ProxyDerivedHasOwnTrap; | |
| 38 ProxyDerivedKeysTrap = from.ProxyDerivedKeysTrap; | |
| 39 }); | |
| 40 | |
| 41 // ---------------------------------------------------------------------------- | 57 // ---------------------------------------------------------------------------- |
| 42 | 58 |
| 59 // ES6 - 9.2.11 SetFunctionName |
| 60 function SetFunctionName(f, name, prefix) { |
| 61 if (IS_SYMBOL(name)) { |
| 62 name = "[" + %SymbolDescription(name) + "]"; |
| 63 } |
| 64 if (IS_UNDEFINED(prefix)) { |
| 65 %FunctionSetName(f, name); |
| 66 } else { |
| 67 %FunctionSetName(f, prefix + " " + name); |
| 68 } |
| 69 } |
| 70 |
| 71 |
| 72 // Helper function used to install functions on objects. |
| 73 function InstallFunctions(object, attributes, functions) { |
| 74 %OptimizeObjectForAddingMultipleProperties(object, functions.length >> 1); |
| 75 for (var i = 0; i < functions.length; i += 2) { |
| 76 var key = functions[i]; |
| 77 var f = functions[i + 1]; |
| 78 SetFunctionName(f, key); |
| 79 %FunctionRemovePrototype(f); |
| 80 %AddNamedProperty(object, key, f, attributes); |
| 81 %SetNativeFlag(f); |
| 82 } |
| 83 %ToFastProperties(object); |
| 84 } |
| 85 |
| 86 |
| 87 function OverrideFunction(object, name, f) { |
| 88 ObjectDefineProperty(object, name, { value: f, |
| 89 writeable: true, |
| 90 configurable: true, |
| 91 enumerable: false }); |
| 92 SetFunctionName(f, name); |
| 93 %FunctionRemovePrototype(f); |
| 94 %SetNativeFlag(f); |
| 95 } |
| 96 |
| 97 |
| 98 // Helper function to install a getter-only accessor property. |
| 99 function InstallGetter(object, name, getter, attributes) { |
| 100 if (typeof attributes == "undefined") { |
| 101 attributes = DONT_ENUM; |
| 102 } |
| 103 SetFunctionName(getter, name, "get"); |
| 104 %FunctionRemovePrototype(getter); |
| 105 %DefineAccessorPropertyUnchecked(object, name, getter, null, attributes); |
| 106 %SetNativeFlag(getter); |
| 107 } |
| 108 |
| 109 |
| 110 // Helper function to install a getter/setter accessor property. |
| 111 function InstallGetterSetter(object, name, getter, setter) { |
| 112 SetFunctionName(getter, name, "get"); |
| 113 SetFunctionName(setter, name, "set"); |
| 114 %FunctionRemovePrototype(getter); |
| 115 %FunctionRemovePrototype(setter); |
| 116 %DefineAccessorPropertyUnchecked(object, name, getter, setter, DONT_ENUM); |
| 117 %SetNativeFlag(getter); |
| 118 %SetNativeFlag(setter); |
| 119 } |
| 120 |
| 121 |
| 122 // Helper function for installing constant properties on objects. |
| 123 function InstallConstants(object, constants) { |
| 124 %OptimizeObjectForAddingMultipleProperties(object, constants.length >> 1); |
| 125 var attributes = DONT_ENUM | DONT_DELETE | READ_ONLY; |
| 126 for (var i = 0; i < constants.length; i += 2) { |
| 127 var name = constants[i]; |
| 128 var k = constants[i + 1]; |
| 129 %AddNamedProperty(object, name, k, attributes); |
| 130 } |
| 131 %ToFastProperties(object); |
| 132 } |
| 133 |
| 134 |
| 135 // Prevents changes to the prototype of a built-in function. |
| 136 // The "prototype" property of the function object is made non-configurable, |
| 137 // and the prototype object is made non-extensible. The latter prevents |
| 138 // changing the __proto__ property. |
| 139 function SetUpLockedPrototype(constructor, fields, methods) { |
| 140 %CheckIsBootstrapping(); |
| 141 var prototype = constructor.prototype; |
| 142 // Install functions first, because this function is used to initialize |
| 143 // PropertyDescriptor itself. |
| 144 var property_count = (methods.length >> 1) + (fields ? fields.length : 0); |
| 145 if (property_count >= 4) { |
| 146 %OptimizeObjectForAddingMultipleProperties(prototype, property_count); |
| 147 } |
| 148 if (fields) { |
| 149 for (var i = 0; i < fields.length; i++) { |
| 150 %AddNamedProperty(prototype, fields[i], |
| 151 UNDEFINED, DONT_ENUM | DONT_DELETE); |
| 152 } |
| 153 } |
| 154 for (var i = 0; i < methods.length; i += 2) { |
| 155 var key = methods[i]; |
| 156 var f = methods[i + 1]; |
| 157 %AddNamedProperty(prototype, key, f, DONT_ENUM | DONT_DELETE | READ_ONLY); |
| 158 %SetNativeFlag(f); |
| 159 } |
| 160 %InternalSetPrototype(prototype, null); |
| 161 %ToFastProperties(prototype); |
| 162 } |
| 163 |
| 164 |
| 165 // ---------------------------------------------------------------------------- |
| 166 |
| 43 | 167 |
| 44 // ECMA 262 - 15.1.4 | 168 // ECMA 262 - 15.1.4 |
| 45 function GlobalIsNaN(number) { | 169 function GlobalIsNaN(number) { |
| 46 number = TO_NUMBER_INLINE(number); | 170 number = TO_NUMBER_INLINE(number); |
| 47 return NUMBER_IS_NAN(number); | 171 return NUMBER_IS_NAN(number); |
| 48 } | 172 } |
| 49 | 173 |
| 50 | 174 |
| 51 // ECMA 262 - 15.1.5 | 175 // ECMA 262 - 15.1.5 |
| 52 function GlobalIsFinite(number) { | 176 function GlobalIsFinite(number) { |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 107 | 231 |
| 108 return %_CallFunction(global_proxy, f); | 232 return %_CallFunction(global_proxy, f); |
| 109 } | 233 } |
| 110 | 234 |
| 111 | 235 |
| 112 // ---------------------------------------------------------------------------- | 236 // ---------------------------------------------------------------------------- |
| 113 | 237 |
| 114 // Set up global object. | 238 // Set up global object. |
| 115 var attributes = DONT_ENUM | DONT_DELETE | READ_ONLY; | 239 var attributes = DONT_ENUM | DONT_DELETE | READ_ONLY; |
| 116 | 240 |
| 117 utils.InstallConstants(global, [ | 241 InstallConstants(global, [ |
| 118 // ECMA 262 - 15.1.1.1. | 242 // ECMA 262 - 15.1.1.1. |
| 119 "NaN", NAN, | 243 "NaN", NAN, |
| 120 // ECMA-262 - 15.1.1.2. | 244 // ECMA-262 - 15.1.1.2. |
| 121 "Infinity", INFINITY, | 245 "Infinity", INFINITY, |
| 122 // ECMA-262 - 15.1.1.2. | 246 // ECMA-262 - 15.1.1.2. |
| 123 "undefined", UNDEFINED, | 247 "undefined", UNDEFINED, |
| 124 ]); | 248 ]); |
| 125 | 249 |
| 126 // Set up non-enumerable function on the global object. | 250 // Set up non-enumerable function on the global object. |
| 127 utils.InstallFunctions(global, DONT_ENUM, [ | 251 InstallFunctions(global, DONT_ENUM, [ |
| 128 "isNaN", GlobalIsNaN, | 252 "isNaN", GlobalIsNaN, |
| 129 "isFinite", GlobalIsFinite, | 253 "isFinite", GlobalIsFinite, |
| 130 "parseInt", GlobalParseInt, | 254 "parseInt", GlobalParseInt, |
| 131 "parseFloat", GlobalParseFloat, | 255 "parseFloat", GlobalParseFloat, |
| 132 "eval", GlobalEval | 256 "eval", GlobalEval |
| 133 ]); | 257 ]); |
| 134 | 258 |
| 135 | 259 |
| 136 // ---------------------------------------------------------------------------- | 260 // ---------------------------------------------------------------------------- |
| 137 // Object | 261 // Object |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 171 } | 295 } |
| 172 | 296 |
| 173 | 297 |
| 174 // ECMA-262 - 15.2.4.5 | 298 // ECMA-262 - 15.2.4.5 |
| 175 function ObjectHasOwnProperty(V) { | 299 function ObjectHasOwnProperty(V) { |
| 176 if (%_IsJSProxy(this)) { | 300 if (%_IsJSProxy(this)) { |
| 177 // TODO(rossberg): adjust once there is a story for symbols vs proxies. | 301 // TODO(rossberg): adjust once there is a story for symbols vs proxies. |
| 178 if (IS_SYMBOL(V)) return false; | 302 if (IS_SYMBOL(V)) return false; |
| 179 | 303 |
| 180 var handler = %GetHandler(this); | 304 var handler = %GetHandler(this); |
| 181 return CallTrap1(handler, "hasOwn", ProxyDerivedHasOwnTrap, $toName(V)); | 305 return CallTrap1(handler, "hasOwn", $proxyDerivedHasOwnTrap, $toName(V)); |
| 182 } | 306 } |
| 183 return %HasOwnProperty(TO_OBJECT_INLINE(this), $toName(V)); | 307 return %HasOwnProperty(TO_OBJECT_INLINE(this), $toName(V)); |
| 184 } | 308 } |
| 185 | 309 |
| 186 | 310 |
| 187 // ECMA-262 - 15.2.4.6 | 311 // ECMA-262 - 15.2.4.6 |
| 188 function ObjectIsPrototypeOf(V) { | 312 function ObjectIsPrototypeOf(V) { |
| 189 if (!IS_SPEC_OBJECT(V)) return false; | 313 if (!IS_SPEC_OBJECT(V)) return false; |
| 190 CHECK_OBJECT_COERCIBLE(this, "Object.prototype.isPrototypeOf"); | 314 CHECK_OBJECT_COERCIBLE(this, "Object.prototype.isPrototypeOf"); |
| 191 return %IsInPrototypeChain(this, V); | 315 return %IsInPrototypeChain(this, V); |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 254 receiver = %GlobalProxy(ObjectLookupSetter); | 378 receiver = %GlobalProxy(ObjectLookupSetter); |
| 255 } | 379 } |
| 256 return %LookupAccessor(TO_OBJECT_INLINE(receiver), $toName(name), SETTER); | 380 return %LookupAccessor(TO_OBJECT_INLINE(receiver), $toName(name), SETTER); |
| 257 } | 381 } |
| 258 | 382 |
| 259 | 383 |
| 260 function ObjectKeys(obj) { | 384 function ObjectKeys(obj) { |
| 261 obj = TO_OBJECT_INLINE(obj); | 385 obj = TO_OBJECT_INLINE(obj); |
| 262 if (%_IsJSProxy(obj)) { | 386 if (%_IsJSProxy(obj)) { |
| 263 var handler = %GetHandler(obj); | 387 var handler = %GetHandler(obj); |
| 264 var names = CallTrap0(handler, "keys", ProxyDerivedKeysTrap); | 388 var names = CallTrap0(handler, "keys", $proxyDerivedKeysTrap); |
| 265 return ToNameArray(names, "keys", false); | 389 return ToNameArray(names, "keys", false); |
| 266 } | 390 } |
| 267 return %OwnKeys(obj); | 391 return %OwnKeys(obj); |
| 268 } | 392 } |
| 269 | 393 |
| 270 | 394 |
| 271 // ES5 8.10.1. | 395 // ES5 8.10.1. |
| 272 function IsAccessorDescriptor(desc) { | 396 function IsAccessorDescriptor(desc) { |
| 273 if (IS_UNDEFINED(desc)) return false; | 397 if (IS_UNDEFINED(desc)) return false; |
| 274 return desc.hasGetter() || desc.hasSetter(); | 398 return desc.hasGetter() || desc.hasSetter(); |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 411 this.enumerable_ = false; | 535 this.enumerable_ = false; |
| 412 this.hasEnumerable_ = false; | 536 this.hasEnumerable_ = false; |
| 413 this.configurable_ = false; | 537 this.configurable_ = false; |
| 414 this.hasConfigurable_ = false; | 538 this.hasConfigurable_ = false; |
| 415 this.get_ = UNDEFINED; | 539 this.get_ = UNDEFINED; |
| 416 this.hasGetter_ = false; | 540 this.hasGetter_ = false; |
| 417 this.set_ = UNDEFINED; | 541 this.set_ = UNDEFINED; |
| 418 this.hasSetter_ = false; | 542 this.hasSetter_ = false; |
| 419 } | 543 } |
| 420 | 544 |
| 421 utils.SetUpLockedPrototype(PropertyDescriptor, [ | 545 SetUpLockedPrototype(PropertyDescriptor, [ |
| 422 "value_", | 546 "value_", |
| 423 "hasValue_", | 547 "hasValue_", |
| 424 "writable_", | 548 "writable_", |
| 425 "hasWritable_", | 549 "hasWritable_", |
| 426 "enumerable_", | 550 "enumerable_", |
| 427 "hasEnumerable_", | 551 "hasEnumerable_", |
| 428 "configurable_", | 552 "configurable_", |
| 429 "hasConfigurable_", | 553 "hasConfigurable_", |
| 430 "get_", | 554 "get_", |
| 431 "hasGetter_", | 555 "hasGetter_", |
| (...skipping 723 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1155 function ProxyFix(obj) { | 1279 function ProxyFix(obj) { |
| 1156 var handler = %GetHandler(obj); | 1280 var handler = %GetHandler(obj); |
| 1157 var props = CallTrap0(handler, "fix", UNDEFINED); | 1281 var props = CallTrap0(handler, "fix", UNDEFINED); |
| 1158 if (IS_UNDEFINED(props)) { | 1282 if (IS_UNDEFINED(props)) { |
| 1159 throw MakeTypeError(kProxyHandlerReturned, handler, "undefined", "fix"); | 1283 throw MakeTypeError(kProxyHandlerReturned, handler, "undefined", "fix"); |
| 1160 } | 1284 } |
| 1161 | 1285 |
| 1162 if (%IsJSFunctionProxy(obj)) { | 1286 if (%IsJSFunctionProxy(obj)) { |
| 1163 var callTrap = %GetCallTrap(obj); | 1287 var callTrap = %GetCallTrap(obj); |
| 1164 var constructTrap = %GetConstructTrap(obj); | 1288 var constructTrap = %GetConstructTrap(obj); |
| 1165 var code = ProxyDelegateCallAndConstruct(callTrap, constructTrap); | 1289 var code = $proxyDelegateCallAndConstruct(callTrap, constructTrap); |
| 1166 %Fix(obj); // becomes a regular function | 1290 %Fix(obj); // becomes a regular function |
| 1167 %SetCode(obj, code); | 1291 %SetCode(obj, code); |
| 1168 // TODO(rossberg): What about length and other properties? Not specified. | 1292 // TODO(rossberg): What about length and other properties? Not specified. |
| 1169 // We just put in some half-reasonable defaults for now. | 1293 // We just put in some half-reasonable defaults for now. |
| 1170 var prototype = new GlobalObject(); | 1294 var prototype = new GlobalObject(); |
| 1171 ObjectDefineProperty(prototype, "constructor", | 1295 ObjectDefineProperty(prototype, "constructor", |
| 1172 {value: obj, writable: true, enumerable: false, configurable: true}); | 1296 {value: obj, writable: true, enumerable: false, configurable: true}); |
| 1173 // TODO(v8:1530): defineProperty does not handle prototype and length. | 1297 // TODO(v8:1530): defineProperty does not handle prototype and length. |
| 1174 %FunctionSetPrototype(obj, prototype); | 1298 %FunctionSetPrototype(obj, prototype); |
| 1175 obj.length = 0; | 1299 obj.length = 0; |
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1333 // ---------------------------------------------------------------------------- | 1457 // ---------------------------------------------------------------------------- |
| 1334 // Object | 1458 // Object |
| 1335 | 1459 |
| 1336 %SetNativeFlag(GlobalObject); | 1460 %SetNativeFlag(GlobalObject); |
| 1337 %SetCode(GlobalObject, ObjectConstructor); | 1461 %SetCode(GlobalObject, ObjectConstructor); |
| 1338 | 1462 |
| 1339 %AddNamedProperty(GlobalObject.prototype, "constructor", GlobalObject, | 1463 %AddNamedProperty(GlobalObject.prototype, "constructor", GlobalObject, |
| 1340 DONT_ENUM); | 1464 DONT_ENUM); |
| 1341 | 1465 |
| 1342 // Set up non-enumerable functions on the Object.prototype object. | 1466 // Set up non-enumerable functions on the Object.prototype object. |
| 1343 utils.InstallFunctions(GlobalObject.prototype, DONT_ENUM, [ | 1467 InstallFunctions(GlobalObject.prototype, DONT_ENUM, [ |
| 1344 "toString", ObjectToString, | 1468 "toString", ObjectToString, |
| 1345 "toLocaleString", ObjectToLocaleString, | 1469 "toLocaleString", ObjectToLocaleString, |
| 1346 "valueOf", ObjectValueOf, | 1470 "valueOf", ObjectValueOf, |
| 1347 "hasOwnProperty", ObjectHasOwnProperty, | 1471 "hasOwnProperty", ObjectHasOwnProperty, |
| 1348 "isPrototypeOf", ObjectIsPrototypeOf, | 1472 "isPrototypeOf", ObjectIsPrototypeOf, |
| 1349 "propertyIsEnumerable", ObjectPropertyIsEnumerable, | 1473 "propertyIsEnumerable", ObjectPropertyIsEnumerable, |
| 1350 "__defineGetter__", ObjectDefineGetter, | 1474 "__defineGetter__", ObjectDefineGetter, |
| 1351 "__lookupGetter__", ObjectLookupGetter, | 1475 "__lookupGetter__", ObjectLookupGetter, |
| 1352 "__defineSetter__", ObjectDefineSetter, | 1476 "__defineSetter__", ObjectDefineSetter, |
| 1353 "__lookupSetter__", ObjectLookupSetter | 1477 "__lookupSetter__", ObjectLookupSetter |
| 1354 ]); | 1478 ]); |
| 1355 utils.InstallGetterSetter(GlobalObject.prototype, "__proto__", ObjectGetProto, | 1479 InstallGetterSetter(GlobalObject.prototype, "__proto__", ObjectGetProto, |
| 1356 ObjectSetProto); | 1480 ObjectSetProto); |
| 1357 | 1481 |
| 1358 // Set up non-enumerable functions in the Object object. | 1482 // Set up non-enumerable functions in the Object object. |
| 1359 utils.InstallFunctions(GlobalObject, DONT_ENUM, [ | 1483 InstallFunctions(GlobalObject, DONT_ENUM, [ |
| 1360 "keys", ObjectKeys, | 1484 "keys", ObjectKeys, |
| 1361 "create", ObjectCreate, | 1485 "create", ObjectCreate, |
| 1362 "defineProperty", ObjectDefineProperty, | 1486 "defineProperty", ObjectDefineProperty, |
| 1363 "defineProperties", ObjectDefineProperties, | 1487 "defineProperties", ObjectDefineProperties, |
| 1364 "freeze", ObjectFreezeJS, | 1488 "freeze", ObjectFreezeJS, |
| 1365 "getPrototypeOf", ObjectGetPrototypeOf, | 1489 "getPrototypeOf", ObjectGetPrototypeOf, |
| 1366 "setPrototypeOf", ObjectSetPrototypeOf, | 1490 "setPrototypeOf", ObjectSetPrototypeOf, |
| 1367 "getOwnPropertyDescriptor", ObjectGetOwnPropertyDescriptor, | 1491 "getOwnPropertyDescriptor", ObjectGetOwnPropertyDescriptor, |
| 1368 "getOwnPropertyNames", ObjectGetOwnPropertyNames, | 1492 "getOwnPropertyNames", ObjectGetOwnPropertyNames, |
| 1369 // getOwnPropertySymbols is added in symbol.js. | 1493 // getOwnPropertySymbols is added in symbol.js. |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1414 } | 1538 } |
| 1415 | 1539 |
| 1416 | 1540 |
| 1417 // ---------------------------------------------------------------------------- | 1541 // ---------------------------------------------------------------------------- |
| 1418 | 1542 |
| 1419 %SetCode(GlobalBoolean, BooleanConstructor); | 1543 %SetCode(GlobalBoolean, BooleanConstructor); |
| 1420 %FunctionSetPrototype(GlobalBoolean, new GlobalBoolean(false)); | 1544 %FunctionSetPrototype(GlobalBoolean, new GlobalBoolean(false)); |
| 1421 %AddNamedProperty(GlobalBoolean.prototype, "constructor", GlobalBoolean, | 1545 %AddNamedProperty(GlobalBoolean.prototype, "constructor", GlobalBoolean, |
| 1422 DONT_ENUM); | 1546 DONT_ENUM); |
| 1423 | 1547 |
| 1424 utils.InstallFunctions(GlobalBoolean.prototype, DONT_ENUM, [ | 1548 InstallFunctions(GlobalBoolean.prototype, DONT_ENUM, [ |
| 1425 "toString", BooleanToString, | 1549 "toString", BooleanToString, |
| 1426 "valueOf", BooleanValueOf | 1550 "valueOf", BooleanValueOf |
| 1427 ]); | 1551 ]); |
| 1428 | 1552 |
| 1429 | 1553 |
| 1430 // ---------------------------------------------------------------------------- | 1554 // ---------------------------------------------------------------------------- |
| 1431 // Number | 1555 // Number |
| 1432 | 1556 |
| 1433 function NumberConstructor(x) { | 1557 function NumberConstructor(x) { |
| 1434 var value = %_ArgumentsLength() == 0 ? 0 : $toNumber(x); | 1558 var value = %_ArgumentsLength() == 0 ? 0 : $toNumber(x); |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1591 // ---------------------------------------------------------------------------- | 1715 // ---------------------------------------------------------------------------- |
| 1592 | 1716 |
| 1593 %SetCode(GlobalNumber, NumberConstructor); | 1717 %SetCode(GlobalNumber, NumberConstructor); |
| 1594 %FunctionSetPrototype(GlobalNumber, new GlobalNumber(0)); | 1718 %FunctionSetPrototype(GlobalNumber, new GlobalNumber(0)); |
| 1595 | 1719 |
| 1596 %OptimizeObjectForAddingMultipleProperties(GlobalNumber.prototype, 8); | 1720 %OptimizeObjectForAddingMultipleProperties(GlobalNumber.prototype, 8); |
| 1597 // Set up the constructor property on the Number prototype object. | 1721 // Set up the constructor property on the Number prototype object. |
| 1598 %AddNamedProperty(GlobalNumber.prototype, "constructor", GlobalNumber, | 1722 %AddNamedProperty(GlobalNumber.prototype, "constructor", GlobalNumber, |
| 1599 DONT_ENUM); | 1723 DONT_ENUM); |
| 1600 | 1724 |
| 1601 utils.InstallConstants(GlobalNumber, [ | 1725 InstallConstants(GlobalNumber, [ |
| 1602 // ECMA-262 section 15.7.3.1. | 1726 // ECMA-262 section 15.7.3.1. |
| 1603 "MAX_VALUE", 1.7976931348623157e+308, | 1727 "MAX_VALUE", 1.7976931348623157e+308, |
| 1604 // ECMA-262 section 15.7.3.2. | 1728 // ECMA-262 section 15.7.3.2. |
| 1605 "MIN_VALUE", 5e-324, | 1729 "MIN_VALUE", 5e-324, |
| 1606 // ECMA-262 section 15.7.3.3. | 1730 // ECMA-262 section 15.7.3.3. |
| 1607 "NaN", NAN, | 1731 "NaN", NAN, |
| 1608 // ECMA-262 section 15.7.3.4. | 1732 // ECMA-262 section 15.7.3.4. |
| 1609 "NEGATIVE_INFINITY", -INFINITY, | 1733 "NEGATIVE_INFINITY", -INFINITY, |
| 1610 // ECMA-262 section 15.7.3.5. | 1734 // ECMA-262 section 15.7.3.5. |
| 1611 "POSITIVE_INFINITY", INFINITY, | 1735 "POSITIVE_INFINITY", INFINITY, |
| 1612 | 1736 |
| 1613 // --- Harmony constants (no spec refs until settled.) | 1737 // --- Harmony constants (no spec refs until settled.) |
| 1614 | 1738 |
| 1615 "MAX_SAFE_INTEGER", %_MathPow(2, 53) - 1, | 1739 "MAX_SAFE_INTEGER", %_MathPow(2, 53) - 1, |
| 1616 "MIN_SAFE_INTEGER", -%_MathPow(2, 53) + 1, | 1740 "MIN_SAFE_INTEGER", -%_MathPow(2, 53) + 1, |
| 1617 "EPSILON", %_MathPow(2, -52) | 1741 "EPSILON", %_MathPow(2, -52) |
| 1618 ]); | 1742 ]); |
| 1619 | 1743 |
| 1620 // Set up non-enumerable functions on the Number prototype object. | 1744 // Set up non-enumerable functions on the Number prototype object. |
| 1621 utils.InstallFunctions(GlobalNumber.prototype, DONT_ENUM, [ | 1745 InstallFunctions(GlobalNumber.prototype, DONT_ENUM, [ |
| 1622 "toString", NumberToStringJS, | 1746 "toString", NumberToStringJS, |
| 1623 "toLocaleString", NumberToLocaleString, | 1747 "toLocaleString", NumberToLocaleString, |
| 1624 "valueOf", NumberValueOf, | 1748 "valueOf", NumberValueOf, |
| 1625 "toFixed", NumberToFixedJS, | 1749 "toFixed", NumberToFixedJS, |
| 1626 "toExponential", NumberToExponentialJS, | 1750 "toExponential", NumberToExponentialJS, |
| 1627 "toPrecision", NumberToPrecisionJS | 1751 "toPrecision", NumberToPrecisionJS |
| 1628 ]); | 1752 ]); |
| 1629 | 1753 |
| 1630 // Harmony Number constructor additions | 1754 // Harmony Number constructor additions |
| 1631 utils.InstallFunctions(GlobalNumber, DONT_ENUM, [ | 1755 InstallFunctions(GlobalNumber, DONT_ENUM, [ |
| 1632 "isFinite", NumberIsFinite, | 1756 "isFinite", NumberIsFinite, |
| 1633 "isInteger", NumberIsInteger, | 1757 "isInteger", NumberIsInteger, |
| 1634 "isNaN", NumberIsNaN, | 1758 "isNaN", NumberIsNaN, |
| 1635 "isSafeInteger", NumberIsSafeInteger, | 1759 "isSafeInteger", NumberIsSafeInteger, |
| 1636 "parseInt", GlobalParseInt, | 1760 "parseInt", GlobalParseInt, |
| 1637 "parseFloat", GlobalParseFloat | 1761 "parseFloat", GlobalParseFloat |
| 1638 ]); | 1762 ]); |
| 1639 | 1763 |
| 1640 %SetForceInlineFlag(NumberIsNaN); | 1764 %SetForceInlineFlag(NumberIsNaN); |
| 1641 | 1765 |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1789 return f; | 1913 return f; |
| 1790 } | 1914 } |
| 1791 | 1915 |
| 1792 | 1916 |
| 1793 // ---------------------------------------------------------------------------- | 1917 // ---------------------------------------------------------------------------- |
| 1794 | 1918 |
| 1795 %SetCode(GlobalFunction, FunctionConstructor); | 1919 %SetCode(GlobalFunction, FunctionConstructor); |
| 1796 %AddNamedProperty(GlobalFunction.prototype, "constructor", GlobalFunction, | 1920 %AddNamedProperty(GlobalFunction.prototype, "constructor", GlobalFunction, |
| 1797 DONT_ENUM); | 1921 DONT_ENUM); |
| 1798 | 1922 |
| 1799 utils.InstallFunctions(GlobalFunction.prototype, DONT_ENUM, [ | 1923 InstallFunctions(GlobalFunction.prototype, DONT_ENUM, [ |
| 1800 "bind", FunctionBind, | 1924 "bind", FunctionBind, |
| 1801 "toString", FunctionToString | 1925 "toString", FunctionToString |
| 1802 ]); | 1926 ]); |
| 1803 | 1927 |
| 1804 // ---------------------------------------------------------------------------- | 1928 // ---------------------------------------------------------------------------- |
| 1805 // Iterator related spec functions. | 1929 // Iterator related spec functions. |
| 1806 | 1930 |
| 1807 // ES6 rev 33, 2015-02-12 | 1931 // ES6 rev 33, 2015-02-12 |
| 1808 // 7.4.1 GetIterator ( obj, method ) | 1932 // 7.4.1 GetIterator ( obj, method ) |
| 1809 function GetIterator(obj, method) { | 1933 function GetIterator(obj, method) { |
| 1810 if (IS_UNDEFINED(method)) { | 1934 if (IS_UNDEFINED(method)) { |
| 1811 method = obj[symbolIterator]; | 1935 method = obj[symbolIterator]; |
| 1812 } | 1936 } |
| 1813 if (!IS_SPEC_FUNCTION(method)) { | 1937 if (!IS_SPEC_FUNCTION(method)) { |
| 1814 throw MakeTypeError(kNotIterable, obj); | 1938 throw MakeTypeError(kNotIterable, obj); |
| 1815 } | 1939 } |
| 1816 var iterator = %_CallFunction(obj, method); | 1940 var iterator = %_CallFunction(obj, method); |
| 1817 if (!IS_SPEC_OBJECT(iterator)) { | 1941 if (!IS_SPEC_OBJECT(iterator)) { |
| 1818 throw MakeTypeError(kNotAnIterator, iterator); | 1942 throw MakeTypeError(kNotAnIterator, iterator); |
| 1819 } | 1943 } |
| 1820 return iterator; | 1944 return iterator; |
| 1821 } | 1945 } |
| 1822 | 1946 |
| 1823 // ---------------------------------------------------------------------------- | 1947 //---------------------------------------------------------------------------- |
| 1824 // Exports | |
| 1825 | 1948 |
| 1949 $delete = Delete; |
| 1826 $functionSourceString = FunctionSourceString; | 1950 $functionSourceString = FunctionSourceString; |
| 1951 $getIterator = GetIterator; |
| 1952 $getMethod = GetMethod; |
| 1827 $globalEval = GlobalEval; | 1953 $globalEval = GlobalEval; |
| 1954 $installConstants = InstallConstants; |
| 1955 $installFunctions = InstallFunctions; |
| 1956 $installGetter = InstallGetter; |
| 1957 $isFinite = GlobalIsFinite; |
| 1958 $isNaN = GlobalIsNaN; |
| 1959 $newFunctionString = NewFunctionString; |
| 1960 $numberIsNaN = NumberIsNaN; |
| 1961 $objectDefineProperties = ObjectDefineProperties; |
| 1962 $objectDefineProperty = ObjectDefineProperty; |
| 1963 $objectFreeze = ObjectFreezeJS; |
| 1828 $objectGetOwnPropertyDescriptor = ObjectGetOwnPropertyDescriptor; | 1964 $objectGetOwnPropertyDescriptor = ObjectGetOwnPropertyDescriptor; |
| 1965 $objectGetOwnPropertyKeys = ObjectGetOwnPropertyKeys; |
| 1966 $objectHasOwnProperty = ObjectHasOwnProperty; |
| 1967 $objectIsFrozen = ObjectIsFrozen; |
| 1968 $objectIsSealed = ObjectIsSealed; |
| 1969 $objectLookupGetter = ObjectLookupGetter; |
| 1970 $objectLookupSetter = ObjectLookupSetter; |
| 1971 $objectToString = ObjectToString; |
| 1972 $overrideFunction = OverrideFunction; |
| 1973 $ownPropertyKeys = OwnPropertyKeys; |
| 1974 $setFunctionName = SetFunctionName; |
| 1975 $setUpLockedPrototype = SetUpLockedPrototype; |
| 1829 $toCompletePropertyDescriptor = ToCompletePropertyDescriptor; | 1976 $toCompletePropertyDescriptor = ToCompletePropertyDescriptor; |
| 1830 | 1977 $toNameArray = ToNameArray; |
| 1831 utils.ObjectDefineProperties = ObjectDefineProperties; | |
| 1832 utils.ObjectDefineProperty = ObjectDefineProperty; | |
| 1833 | |
| 1834 utils.Export(function(to) { | |
| 1835 to.Delete = Delete; | |
| 1836 to.GetIterator = GetIterator; | |
| 1837 to.GetMethod = GetMethod; | |
| 1838 to.IsFinite = GlobalIsFinite; | |
| 1839 to.IsNaN = GlobalIsNaN; | |
| 1840 to.NewFunctionString = NewFunctionString; | |
| 1841 to.NumberIsNaN = NumberIsNaN; | |
| 1842 to.ObjectDefineProperty = ObjectDefineProperty; | |
| 1843 to.ObjectFreeze = ObjectFreezeJS; | |
| 1844 to.ObjectGetOwnPropertyKeys = ObjectGetOwnPropertyKeys; | |
| 1845 to.ObjectHasOwnProperty = ObjectHasOwnProperty; | |
| 1846 to.ObjectIsFrozen = ObjectIsFrozen; | |
| 1847 to.ObjectIsSealed = ObjectIsSealed; | |
| 1848 to.ObjectToString = ObjectToString; | |
| 1849 to.OwnPropertyKeys = OwnPropertyKeys; | |
| 1850 to.ToNameArray = ToNameArray; | |
| 1851 }); | |
| 1852 | 1978 |
| 1853 }) | 1979 }) |
| OLD | NEW |