| 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) { | 5 (function(global, utils) { |
| 6 | 6 |
| 7 %CheckIsBootstrapping(); | 7 %CheckIsBootstrapping(); |
| 8 | 8 |
| 9 // ---------------------------------------------------------------------------- | 9 // ---------------------------------------------------------------------------- |
| 10 // Imports | 10 // Imports |
| (...skipping 1234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1245 "parseInt", GlobalParseInt, | 1245 "parseInt", GlobalParseInt, |
| 1246 "parseFloat", GlobalParseFloat | 1246 "parseFloat", GlobalParseFloat |
| 1247 ]); | 1247 ]); |
| 1248 | 1248 |
| 1249 %SetForceInlineFlag(NumberIsNaN); | 1249 %SetForceInlineFlag(NumberIsNaN); |
| 1250 | 1250 |
| 1251 | 1251 |
| 1252 // ---------------------------------------------------------------------------- | 1252 // ---------------------------------------------------------------------------- |
| 1253 // Function | 1253 // Function |
| 1254 | 1254 |
| 1255 function NativeCodeFunctionSourceString(func) { | |
| 1256 var name = %FunctionGetName(func); | |
| 1257 if (name) { | |
| 1258 // Mimic what KJS does. | |
| 1259 return 'function ' + name + '() { [native code] }'; | |
| 1260 } | |
| 1261 | |
| 1262 return 'function () { [native code] }'; | |
| 1263 } | |
| 1264 | |
| 1265 function FunctionSourceString(func) { | |
| 1266 if (!IS_FUNCTION(func)) { | |
| 1267 throw MakeTypeError(kNotGeneric, 'Function.prototype.toString'); | |
| 1268 } | |
| 1269 | |
| 1270 if (%FunctionHidesSource(func)) { | |
| 1271 return NativeCodeFunctionSourceString(func); | |
| 1272 } | |
| 1273 | |
| 1274 var classSource = %ClassGetSourceCode(func); | |
| 1275 if (IS_STRING(classSource)) { | |
| 1276 return classSource; | |
| 1277 } | |
| 1278 | |
| 1279 var source = %FunctionGetSourceCode(func); | |
| 1280 if (!IS_STRING(source)) { | |
| 1281 return NativeCodeFunctionSourceString(func); | |
| 1282 } | |
| 1283 | |
| 1284 if (%FunctionIsArrow(func)) { | |
| 1285 return source; | |
| 1286 } | |
| 1287 | |
| 1288 var name = %FunctionNameShouldPrintAsAnonymous(func) | |
| 1289 ? 'anonymous' | |
| 1290 : %FunctionGetName(func); | |
| 1291 | |
| 1292 var isGenerator = %FunctionIsGenerator(func); | |
| 1293 var head = %FunctionIsConciseMethod(func) | |
| 1294 ? (isGenerator ? '*' : '') | |
| 1295 : (isGenerator ? 'function* ' : 'function '); | |
| 1296 return head + name + source; | |
| 1297 } | |
| 1298 | |
| 1299 | |
| 1300 function FunctionToString() { | |
| 1301 return FunctionSourceString(this); | |
| 1302 } | |
| 1303 | |
| 1304 | |
| 1305 // ES6 9.2.3.2 Function.prototype.bind(thisArg , ...args) | 1255 // ES6 9.2.3.2 Function.prototype.bind(thisArg , ...args) |
| 1306 function FunctionBind(this_arg) { // Length is 1. | 1256 function FunctionBind(this_arg) { // Length is 1. |
| 1307 if (!IS_CALLABLE(this)) throw MakeTypeError(kFunctionBind); | 1257 if (!IS_CALLABLE(this)) throw MakeTypeError(kFunctionBind); |
| 1308 | 1258 |
| 1309 var boundFunction = function () { | 1259 var boundFunction = function () { |
| 1310 // Poison .arguments and .caller, but is otherwise not detectable. | 1260 // Poison .arguments and .caller, but is otherwise not detectable. |
| 1311 "use strict"; | 1261 "use strict"; |
| 1312 // This function must not use any object literals (Object, Array, RegExp), | 1262 // This function must not use any object literals (Object, Array, RegExp), |
| 1313 // since the literals-array is being used to store the bound data. | 1263 // since the literals-array is being used to store the bound data. |
| 1314 if (!IS_UNDEFINED(new.target)) { | 1264 if (!IS_UNDEFINED(new.target)) { |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1406 | 1356 |
| 1407 | 1357 |
| 1408 // ---------------------------------------------------------------------------- | 1358 // ---------------------------------------------------------------------------- |
| 1409 | 1359 |
| 1410 %SetCode(GlobalFunction, FunctionConstructor); | 1360 %SetCode(GlobalFunction, FunctionConstructor); |
| 1411 %AddNamedProperty(GlobalFunction.prototype, "constructor", GlobalFunction, | 1361 %AddNamedProperty(GlobalFunction.prototype, "constructor", GlobalFunction, |
| 1412 DONT_ENUM); | 1362 DONT_ENUM); |
| 1413 | 1363 |
| 1414 utils.InstallFunctions(GlobalFunction.prototype, DONT_ENUM, [ | 1364 utils.InstallFunctions(GlobalFunction.prototype, DONT_ENUM, [ |
| 1415 "bind", FunctionBind, | 1365 "bind", FunctionBind, |
| 1416 "toString", FunctionToString | |
| 1417 ]); | 1366 ]); |
| 1418 | 1367 |
| 1419 // ---------------------------------------------------------------------------- | 1368 // ---------------------------------------------------------------------------- |
| 1420 // Iterator related spec functions. | 1369 // Iterator related spec functions. |
| 1421 | 1370 |
| 1422 // ES6 7.4.1 GetIterator(obj, method) | 1371 // ES6 7.4.1 GetIterator(obj, method) |
| 1423 function GetIterator(obj, method) { | 1372 function GetIterator(obj, method) { |
| 1424 if (IS_UNDEFINED(method)) { | 1373 if (IS_UNDEFINED(method)) { |
| 1425 method = obj[iteratorSymbol]; | 1374 method = obj[iteratorSymbol]; |
| 1426 } | 1375 } |
| 1427 if (!IS_CALLABLE(method)) { | 1376 if (!IS_CALLABLE(method)) { |
| 1428 throw MakeTypeError(kNotIterable, obj); | 1377 throw MakeTypeError(kNotIterable, obj); |
| 1429 } | 1378 } |
| 1430 var iterator = %_Call(method, obj); | 1379 var iterator = %_Call(method, obj); |
| 1431 if (!IS_RECEIVER(iterator)) { | 1380 if (!IS_RECEIVER(iterator)) { |
| 1432 throw MakeTypeError(kNotAnIterator, iterator); | 1381 throw MakeTypeError(kNotAnIterator, iterator); |
| 1433 } | 1382 } |
| 1434 return iterator; | 1383 return iterator; |
| 1435 } | 1384 } |
| 1436 | 1385 |
| 1437 // ---------------------------------------------------------------------------- | 1386 // ---------------------------------------------------------------------------- |
| 1438 // Exports | 1387 // Exports |
| 1439 | 1388 |
| 1440 utils.Export(function(to) { | 1389 utils.Export(function(to) { |
| 1441 to.FunctionSourceString = FunctionSourceString; | |
| 1442 to.GetIterator = GetIterator; | 1390 to.GetIterator = GetIterator; |
| 1443 to.GetMethod = GetMethod; | 1391 to.GetMethod = GetMethod; |
| 1444 to.IsFinite = GlobalIsFinite; | 1392 to.IsFinite = GlobalIsFinite; |
| 1445 to.IsNaN = GlobalIsNaN; | 1393 to.IsNaN = GlobalIsNaN; |
| 1446 to.NewFunctionString = NewFunctionString; | 1394 to.NewFunctionString = NewFunctionString; |
| 1447 to.NumberIsNaN = NumberIsNaN; | 1395 to.NumberIsNaN = NumberIsNaN; |
| 1448 to.ObjectDefineProperties = ObjectDefineProperties; | 1396 to.ObjectDefineProperties = ObjectDefineProperties; |
| 1449 to.ObjectDefineProperty = ObjectDefineProperty; | 1397 to.ObjectDefineProperty = ObjectDefineProperty; |
| 1450 to.ObjectFreeze = ObjectFreezeJS; | 1398 to.ObjectFreeze = ObjectFreezeJS; |
| 1451 to.ObjectHasOwnProperty = ObjectHasOwnProperty; | 1399 to.ObjectHasOwnProperty = ObjectHasOwnProperty; |
| 1452 to.ObjectIsFrozen = ObjectIsFrozen; | 1400 to.ObjectIsFrozen = ObjectIsFrozen; |
| 1453 to.ObjectIsSealed = ObjectIsSealed; | 1401 to.ObjectIsSealed = ObjectIsSealed; |
| 1454 to.ObjectKeys = ObjectKeys; | 1402 to.ObjectKeys = ObjectKeys; |
| 1455 }); | 1403 }); |
| 1456 | 1404 |
| 1457 %InstallToContext([ | 1405 %InstallToContext([ |
| 1458 "global_eval_fun", GlobalEval, | 1406 "global_eval_fun", GlobalEval, |
| 1459 "object_value_of", ObjectValueOf, | 1407 "object_value_of", ObjectValueOf, |
| 1460 ]); | 1408 ]); |
| 1461 | 1409 |
| 1462 }) | 1410 }) |
| OLD | NEW |