OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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 #include "src/bootstrapper.h" | 5 #include "src/bootstrapper.h" |
6 | 6 |
7 #include "src/accessors.h" | 7 #include "src/accessors.h" |
8 #include "src/api-natives.h" | 8 #include "src/api-natives.h" |
9 #include "src/base/ieee754.h" | 9 #include "src/base/ieee754.h" |
10 #include "src/code-stubs.h" | 10 #include "src/code-stubs.h" |
(...skipping 1293 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1304 { // --- N u m b e r --- | 1304 { // --- N u m b e r --- |
1305 Handle<JSFunction> number_fun = InstallFunction( | 1305 Handle<JSFunction> number_fun = InstallFunction( |
1306 global, "Number", JS_VALUE_TYPE, JSValue::kSize, | 1306 global, "Number", JS_VALUE_TYPE, JSValue::kSize, |
1307 isolate->initial_object_prototype(), Builtins::kNumberConstructor); | 1307 isolate->initial_object_prototype(), Builtins::kNumberConstructor); |
1308 number_fun->shared()->DontAdaptArguments(); | 1308 number_fun->shared()->DontAdaptArguments(); |
1309 number_fun->shared()->set_construct_stub( | 1309 number_fun->shared()->set_construct_stub( |
1310 *isolate->builtins()->NumberConstructor_ConstructStub()); | 1310 *isolate->builtins()->NumberConstructor_ConstructStub()); |
1311 number_fun->shared()->set_length(1); | 1311 number_fun->shared()->set_length(1); |
1312 InstallWithIntrinsicDefaultProto(isolate, number_fun, | 1312 InstallWithIntrinsicDefaultProto(isolate, number_fun, |
1313 Context::NUMBER_FUNCTION_INDEX); | 1313 Context::NUMBER_FUNCTION_INDEX); |
1314 | |
1315 // Create the %NumberPrototype% | |
1316 Handle<JSValue> prototype = | |
1317 Handle<JSValue>::cast(factory->NewJSObject(number_fun, TENURED)); | |
1318 prototype->set_value(Smi::FromInt(0)); | |
1319 Accessors::FunctionSetPrototype(number_fun, prototype).Assert(); | |
1320 | |
1321 // Install the "constructor" property on the {prototype}. | |
1322 JSObject::AddProperty(prototype, factory->constructor_string(), number_fun, | |
1323 DONT_ENUM); | |
1324 | |
1325 // Install the Number.prototype methods. | |
1326 SimpleInstallFunction(prototype, "toExponential", | |
1327 Builtins::kNumberPrototypeToExponential, 1, false); | |
1328 SimpleInstallFunction(prototype, "toFixed", | |
1329 Builtins::kNumberPrototypeToFixed, 1, false); | |
1330 SimpleInstallFunction(prototype, "toPrecision", | |
1331 Builtins::kNumberPrototypeToPrecision, 1, false); | |
1332 SimpleInstallFunction(prototype, "toString", | |
1333 Builtins::kNumberPrototypeToString, 1, false); | |
1334 SimpleInstallFunction(prototype, "valueOf", | |
1335 Builtins::kNumberPrototypeValueOf, 0, true); | |
1336 | |
1337 // Install i18n fallback functions. | |
1338 SimpleInstallFunction(prototype, "toLocaleString", | |
1339 Builtins::kNumberPrototypeToString, 1, true); | |
1340 } | 1314 } |
1341 | 1315 |
1342 { // --- B o o l e a n --- | 1316 { // --- B o o l e a n --- |
1343 Handle<JSFunction> boolean_fun = | 1317 Handle<JSFunction> boolean_fun = |
1344 InstallFunction(global, "Boolean", JS_VALUE_TYPE, JSValue::kSize, | 1318 InstallFunction(global, "Boolean", JS_VALUE_TYPE, JSValue::kSize, |
1345 isolate->initial_object_prototype(), | 1319 isolate->initial_object_prototype(), |
1346 Builtins::kBooleanConstructor); | 1320 Builtins::kBooleanConstructor); |
1347 boolean_fun->shared()->DontAdaptArguments(); | 1321 boolean_fun->shared()->DontAdaptArguments(); |
1348 boolean_fun->shared()->set_construct_stub( | 1322 boolean_fun->shared()->set_construct_stub( |
1349 *isolate->builtins()->BooleanConstructor_ConstructStub()); | 1323 *isolate->builtins()->BooleanConstructor_ConstructStub()); |
1350 boolean_fun->shared()->set_length(1); | 1324 boolean_fun->shared()->set_length(1); |
1351 InstallWithIntrinsicDefaultProto(isolate, boolean_fun, | 1325 InstallWithIntrinsicDefaultProto(isolate, boolean_fun, |
1352 Context::BOOLEAN_FUNCTION_INDEX); | 1326 Context::BOOLEAN_FUNCTION_INDEX); |
1353 | 1327 |
1354 // Create the %BooleanPrototype% | 1328 // Create the %BooleanPrototype% |
1355 Handle<JSValue> prototype = | 1329 Handle<JSValue> prototype = |
1356 Handle<JSValue>::cast(factory->NewJSObject(boolean_fun, TENURED)); | 1330 Handle<JSValue>::cast(factory->NewJSObject(boolean_fun, TENURED)); |
1357 prototype->set_value(isolate->heap()->false_value()); | 1331 prototype->set_value(isolate->heap()->false_value()); |
1358 Accessors::FunctionSetPrototype(boolean_fun, prototype).Assert(); | 1332 Accessors::FunctionSetPrototype(boolean_fun, prototype).Assert(); |
1359 | 1333 |
1360 // Install the "constructor" property on the {prototype}. | 1334 // Install the "constructor" property on the {prototype}. |
1361 JSObject::AddProperty(prototype, factory->constructor_string(), boolean_fun, | 1335 JSObject::AddProperty(prototype, factory->constructor_string(), boolean_fun, |
1362 DONT_ENUM); | 1336 DONT_ENUM); |
1363 | 1337 |
1364 // Install the Boolean.prototype methods. | 1338 // Install the Boolean.prototype methods. |
1365 SimpleInstallFunction(prototype, "toString", | 1339 SimpleInstallFunction(prototype, "toString", |
1366 Builtins::kBooleanPrototypeToString, 0, true); | 1340 Builtins::kBooleanPrototypeToString, 0, false); |
1367 SimpleInstallFunction(prototype, "valueOf", | 1341 SimpleInstallFunction(prototype, "valueOf", |
1368 Builtins::kBooleanPrototypeValueOf, 0, true); | 1342 Builtins::kBooleanPrototypeValueOf, 0, false); |
1369 } | 1343 } |
1370 | 1344 |
1371 { // --- S t r i n g --- | 1345 { // --- S t r i n g --- |
1372 Handle<JSFunction> string_fun = InstallFunction( | 1346 Handle<JSFunction> string_fun = InstallFunction( |
1373 global, "String", JS_VALUE_TYPE, JSValue::kSize, | 1347 global, "String", JS_VALUE_TYPE, JSValue::kSize, |
1374 isolate->initial_object_prototype(), Builtins::kStringConstructor); | 1348 isolate->initial_object_prototype(), Builtins::kStringConstructor); |
1375 string_fun->shared()->set_construct_stub( | 1349 string_fun->shared()->set_construct_stub( |
1376 *isolate->builtins()->StringConstructor_ConstructStub()); | 1350 *isolate->builtins()->StringConstructor_ConstructStub()); |
1377 string_fun->shared()->DontAdaptArguments(); | 1351 string_fun->shared()->DontAdaptArguments(); |
1378 string_fun->shared()->set_length(1); | 1352 string_fun->shared()->set_length(1); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1411 | 1385 |
1412 // Install the "constructor" property on the {prototype}. | 1386 // Install the "constructor" property on the {prototype}. |
1413 JSObject::AddProperty(prototype, factory->constructor_string(), string_fun, | 1387 JSObject::AddProperty(prototype, factory->constructor_string(), string_fun, |
1414 DONT_ENUM); | 1388 DONT_ENUM); |
1415 | 1389 |
1416 // Install the String.prototype methods. | 1390 // Install the String.prototype methods. |
1417 SimpleInstallFunction(prototype, "charAt", Builtins::kStringPrototypeCharAt, | 1391 SimpleInstallFunction(prototype, "charAt", Builtins::kStringPrototypeCharAt, |
1418 1, true); | 1392 1, true); |
1419 SimpleInstallFunction(prototype, "charCodeAt", | 1393 SimpleInstallFunction(prototype, "charCodeAt", |
1420 Builtins::kStringPrototypeCharCodeAt, 1, true); | 1394 Builtins::kStringPrototypeCharCodeAt, 1, true); |
1421 SimpleInstallFunction(prototype, "toString", | |
1422 Builtins::kStringPrototypeToString, 0, true); | |
1423 SimpleInstallFunction(prototype, "trim", Builtins::kStringPrototypeTrim, 0, | 1395 SimpleInstallFunction(prototype, "trim", Builtins::kStringPrototypeTrim, 0, |
1424 false); | 1396 false); |
1425 SimpleInstallFunction(prototype, "trimLeft", | 1397 SimpleInstallFunction(prototype, "trimLeft", |
1426 Builtins::kStringPrototypeTrimLeft, 0, false); | 1398 Builtins::kStringPrototypeTrimLeft, 0, false); |
1427 SimpleInstallFunction(prototype, "trimRight", | 1399 SimpleInstallFunction(prototype, "trimRight", |
1428 Builtins::kStringPrototypeTrimRight, 0, false); | 1400 Builtins::kStringPrototypeTrimRight, 0, false); |
1429 SimpleInstallFunction(prototype, "valueOf", | |
1430 Builtins::kStringPrototypeValueOf, 0, true); | |
1431 } | 1401 } |
1432 | 1402 |
1433 { | 1403 { |
1434 // --- S y m b o l --- | 1404 // --- S y m b o l --- |
1435 Handle<JSObject> prototype = | 1405 Handle<JSObject> prototype = |
1436 factory->NewJSObject(isolate->object_function(), TENURED); | 1406 factory->NewJSObject(isolate->object_function(), TENURED); |
1437 Handle<JSFunction> symbol_fun = | 1407 Handle<JSFunction> symbol_fun = |
1438 InstallFunction(global, "Symbol", JS_VALUE_TYPE, JSValue::kSize, | 1408 InstallFunction(global, "Symbol", JS_VALUE_TYPE, JSValue::kSize, |
1439 prototype, Builtins::kSymbolConstructor); | 1409 prototype, Builtins::kSymbolConstructor); |
1440 symbol_fun->shared()->set_construct_stub( | 1410 symbol_fun->shared()->set_construct_stub( |
1441 *isolate->builtins()->SymbolConstructor_ConstructStub()); | 1411 *isolate->builtins()->SymbolConstructor_ConstructStub()); |
1442 symbol_fun->shared()->set_length(0); | 1412 symbol_fun->shared()->set_length(0); |
1443 symbol_fun->shared()->DontAdaptArguments(); | 1413 symbol_fun->shared()->DontAdaptArguments(); |
1444 native_context()->set_symbol_function(*symbol_fun); | 1414 native_context()->set_symbol_function(*symbol_fun); |
1445 | 1415 |
1446 // Install the @@toStringTag property on the {prototype}. | |
1447 JSObject::AddProperty( | |
1448 prototype, factory->to_string_tag_symbol(), | |
1449 factory->NewStringFromAsciiChecked("Symbol"), | |
1450 static_cast<PropertyAttributes>(DONT_ENUM | READ_ONLY)); | |
1451 | |
1452 // Install the "constructor" property on the {prototype}. | 1416 // Install the "constructor" property on the {prototype}. |
1453 JSObject::AddProperty(prototype, factory->constructor_string(), symbol_fun, | 1417 JSObject::AddProperty(prototype, factory->constructor_string(), symbol_fun, |
1454 DONT_ENUM); | 1418 DONT_ENUM); |
1455 | |
1456 // Install the Symbol.prototype methods. | |
1457 SimpleInstallFunction(prototype, "toString", | |
1458 Builtins::kSymbolPrototypeToString, 0, true); | |
1459 SimpleInstallFunction(prototype, "valueOf", | |
1460 Builtins::kSymbolPrototypeValueOf, 0, true); | |
1461 | |
1462 // Install the @@toPrimitive function. | |
1463 Handle<JSFunction> to_primitive = InstallFunction( | |
1464 prototype, factory->to_primitive_symbol(), JS_OBJECT_TYPE, | |
1465 JSObject::kHeaderSize, MaybeHandle<JSObject>(), | |
1466 Builtins::kSymbolPrototypeToPrimitive, | |
1467 static_cast<PropertyAttributes>(DONT_ENUM | READ_ONLY)); | |
1468 | |
1469 // Set the expected parameters for @@toPrimitive to 1; required by builtin. | |
1470 to_primitive->shared()->set_internal_formal_parameter_count(1); | |
1471 | |
1472 // Set the length for the function to satisfy ECMA-262. | |
1473 to_primitive->shared()->set_length(1); | |
1474 } | 1419 } |
1475 | 1420 |
1476 { // --- D a t e --- | 1421 { // --- D a t e --- |
1477 // Builtin functions for Date.prototype. | 1422 // Builtin functions for Date.prototype. |
1478 Handle<JSObject> prototype = | 1423 Handle<JSObject> prototype = |
1479 factory->NewJSObject(isolate->object_function(), TENURED); | 1424 factory->NewJSObject(isolate->object_function(), TENURED); |
1480 Handle<JSFunction> date_fun = | 1425 Handle<JSFunction> date_fun = |
1481 InstallFunction(global, "Date", JS_DATE_TYPE, JSDate::kSize, prototype, | 1426 InstallFunction(global, "Date", JS_DATE_TYPE, JSDate::kSize, prototype, |
1482 Builtins::kDateConstructor); | 1427 Builtins::kDateConstructor); |
1483 InstallWithIntrinsicDefaultProto(isolate, date_fun, | 1428 InstallWithIntrinsicDefaultProto(isolate, date_fun, |
(...skipping 2526 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4010 } | 3955 } |
4011 | 3956 |
4012 | 3957 |
4013 // Called when the top-level V8 mutex is destroyed. | 3958 // Called when the top-level V8 mutex is destroyed. |
4014 void Bootstrapper::FreeThreadResources() { | 3959 void Bootstrapper::FreeThreadResources() { |
4015 DCHECK(!IsActive()); | 3960 DCHECK(!IsActive()); |
4016 } | 3961 } |
4017 | 3962 |
4018 } // namespace internal | 3963 } // namespace internal |
4019 } // namespace v8 | 3964 } // namespace v8 |
OLD | NEW |