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

Side by Side Diff: src/bootstrapper.cc

Issue 1579613002: [builtins] Refactor the remaining Date builtins. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: As per offline discussion, remove the weird test, which does not add a lot of value. Created 4 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 | « BUILD.gn ('k') | src/builtins.h » ('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 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/code-stubs.h" 9 #include "src/code-stubs.h"
10 #include "src/extensions/externalize-string-extension.h" 10 #include "src/extensions/externalize-string-extension.h"
(...skipping 1228 matching lines...) Expand 10 before | Expand all | Expand 10 after
1239 isolate->initial_object_prototype(), Builtins::kSymbolConstructor); 1239 isolate->initial_object_prototype(), Builtins::kSymbolConstructor);
1240 symbol_fun->shared()->set_construct_stub( 1240 symbol_fun->shared()->set_construct_stub(
1241 *isolate->builtins()->SymbolConstructor_ConstructStub()); 1241 *isolate->builtins()->SymbolConstructor_ConstructStub());
1242 symbol_fun->shared()->set_length(1); 1242 symbol_fun->shared()->set_length(1);
1243 symbol_fun->shared()->DontAdaptArguments(); 1243 symbol_fun->shared()->DontAdaptArguments();
1244 native_context()->set_symbol_function(*symbol_fun); 1244 native_context()->set_symbol_function(*symbol_fun);
1245 } 1245 }
1246 1246
1247 { // --- D a t e --- 1247 { // --- D a t e ---
1248 // Builtin functions for Date.prototype. 1248 // Builtin functions for Date.prototype.
1249 Handle<JSFunction> date_fun = InstallFunction( 1249 Handle<JSObject> prototype =
1250 global, "Date", JS_DATE_TYPE, JSDate::kSize, 1250 factory->NewJSObject(isolate->object_function(), TENURED);
1251 isolate->initial_object_prototype(), Builtins::kDateConstructor); 1251 Handle<JSFunction> date_fun =
1252 InstallFunction(global, "Date", JS_DATE_TYPE, JSDate::kSize, prototype,
1253 Builtins::kDateConstructor);
1252 InstallWithIntrinsicDefaultProto(isolate, date_fun, 1254 InstallWithIntrinsicDefaultProto(isolate, date_fun,
1253 Context::DATE_FUNCTION_INDEX); 1255 Context::DATE_FUNCTION_INDEX);
1254 date_fun->shared()->set_construct_stub( 1256 date_fun->shared()->set_construct_stub(
1255 *isolate->builtins()->DateConstructor_ConstructStub()); 1257 *isolate->builtins()->DateConstructor_ConstructStub());
1256 date_fun->shared()->set_length(7); 1258 date_fun->shared()->set_length(7);
1257 date_fun->shared()->DontAdaptArguments(); 1259 date_fun->shared()->DontAdaptArguments();
1260
1261 // Install the Date.now, Date.parse and Date.UTC functions.
1262 SimpleInstallFunction(date_fun, "now", Builtins::kDateNow, 0, false);
1263 SimpleInstallFunction(date_fun, "parse", Builtins::kDateParse, 1, false);
1264 SimpleInstallFunction(date_fun, "UTC", Builtins::kDateUTC, 7, false);
1265
1266 // Install the "constructor" property on the {prototype}.
1267 JSObject::AddProperty(prototype, factory->constructor_string(), date_fun,
1268 DONT_ENUM);
1269
1270 // Install the Date.prototype methods.
1271 SimpleInstallFunction(prototype, "toString",
1272 Builtins::kDatePrototypeToString, 0, false);
1273 SimpleInstallFunction(prototype, "toDateString",
1274 Builtins::kDatePrototypeToDateString, 0, false);
1275 SimpleInstallFunction(prototype, "toTimeString",
1276 Builtins::kDatePrototypeToTimeString, 0, false);
1277 SimpleInstallFunction(prototype, "toGMTString",
1278 Builtins::kDatePrototypeToUTCString, 0, false);
1279 SimpleInstallFunction(prototype, "toISOString",
1280 Builtins::kDatePrototypeToISOString, 0, false);
1281 SimpleInstallFunction(prototype, "toUTCString",
1282 Builtins::kDatePrototypeToUTCString, 0, false);
1283 SimpleInstallFunction(prototype, "getDate", Builtins::kDatePrototypeGetDate,
1284 0, true);
1285 SimpleInstallFunction(prototype, "setDate", Builtins::kDatePrototypeSetDate,
1286 1, false);
1287 SimpleInstallFunction(prototype, "getDay", Builtins::kDatePrototypeGetDay,
1288 0, true);
1289 SimpleInstallFunction(prototype, "getFullYear",
1290 Builtins::kDatePrototypeGetFullYear, 0, true);
1291 SimpleInstallFunction(prototype, "setFullYear",
1292 Builtins::kDatePrototypeSetFullYear, 3, false);
1293 SimpleInstallFunction(prototype, "getHours",
1294 Builtins::kDatePrototypeGetHours, 0, true);
1295 SimpleInstallFunction(prototype, "setHours",
1296 Builtins::kDatePrototypeSetHours, 4, false);
1297 SimpleInstallFunction(prototype, "getMilliseconds",
1298 Builtins::kDatePrototypeGetMilliseconds, 0, true);
1299 SimpleInstallFunction(prototype, "setMilliseconds",
1300 Builtins::kDatePrototypeSetMilliseconds, 1, false);
1301 SimpleInstallFunction(prototype, "getMinutes",
1302 Builtins::kDatePrototypeGetMinutes, 0, true);
1303 SimpleInstallFunction(prototype, "setMinutes",
1304 Builtins::kDatePrototypeSetMinutes, 3, false);
1305 SimpleInstallFunction(prototype, "getMonth",
1306 Builtins::kDatePrototypeGetMonth, 0, true);
1307 SimpleInstallFunction(prototype, "setMonth",
1308 Builtins::kDatePrototypeSetMonth, 2, false);
1309 SimpleInstallFunction(prototype, "getSeconds",
1310 Builtins::kDatePrototypeGetSeconds, 0, true);
1311 SimpleInstallFunction(prototype, "setSeconds",
1312 Builtins::kDatePrototypeSetSeconds, 2, false);
1313 SimpleInstallFunction(prototype, "getTime", Builtins::kDatePrototypeGetTime,
1314 0, true);
1315 SimpleInstallFunction(prototype, "setTime", Builtins::kDatePrototypeSetTime,
1316 1, false);
1317 SimpleInstallFunction(prototype, "getTimezoneOffset",
1318 Builtins::kDatePrototypeGetTimezoneOffset, 0, true);
1319 SimpleInstallFunction(prototype, "getUTCDate",
1320 Builtins::kDatePrototypeGetUTCDate, 0, true);
1321 SimpleInstallFunction(prototype, "setUTCDate",
1322 Builtins::kDatePrototypeSetUTCDate, 1, false);
1323 SimpleInstallFunction(prototype, "getUTCDay",
1324 Builtins::kDatePrototypeGetUTCDay, 0, true);
1325 SimpleInstallFunction(prototype, "getUTCFullYear",
1326 Builtins::kDatePrototypeGetUTCFullYear, 0, true);
1327 SimpleInstallFunction(prototype, "setUTCFullYear",
1328 Builtins::kDatePrototypeSetUTCFullYear, 3, false);
1329 SimpleInstallFunction(prototype, "getUTCHours",
1330 Builtins::kDatePrototypeGetUTCHours, 0, true);
1331 SimpleInstallFunction(prototype, "setUTCHours",
1332 Builtins::kDatePrototypeSetUTCHours, 4, false);
1333 SimpleInstallFunction(prototype, "getUTCMilliseconds",
1334 Builtins::kDatePrototypeGetUTCMilliseconds, 0, true);
1335 SimpleInstallFunction(prototype, "setUTCMilliseconds",
1336 Builtins::kDatePrototypeSetUTCMilliseconds, 1, false);
1337 SimpleInstallFunction(prototype, "getUTCMinutes",
1338 Builtins::kDatePrototypeGetUTCMinutes, 0, true);
1339 SimpleInstallFunction(prototype, "setUTCMinutes",
1340 Builtins::kDatePrototypeSetUTCMinutes, 3, false);
1341 SimpleInstallFunction(prototype, "getUTCMonth",
1342 Builtins::kDatePrototypeGetUTCMonth, 0, true);
1343 SimpleInstallFunction(prototype, "setUTCMonth",
1344 Builtins::kDatePrototypeSetUTCMonth, 2, false);
1345 SimpleInstallFunction(prototype, "getUTCSeconds",
1346 Builtins::kDatePrototypeGetUTCSeconds, 0, true);
1347 SimpleInstallFunction(prototype, "setUTCSeconds",
1348 Builtins::kDatePrototypeSetUTCSeconds, 2, false);
1349 SimpleInstallFunction(prototype, "valueOf", Builtins::kDatePrototypeValueOf,
1350 0, false);
1351 SimpleInstallFunction(prototype, "getYear", Builtins::kDatePrototypeGetYear,
1352 0, true);
1353 SimpleInstallFunction(prototype, "setYear", Builtins::kDatePrototypeSetYear,
1354 1, false);
1355
1356 // Install i18n fallback functions.
1357 SimpleInstallFunction(prototype, "toLocaleString",
1358 Builtins::kDatePrototypeToString, 0, false);
1359 SimpleInstallFunction(prototype, "toLocaleDateString",
1360 Builtins::kDatePrototypeToDateString, 0, false);
1361 SimpleInstallFunction(prototype, "toLocaleTimeString",
1362 Builtins::kDatePrototypeToTimeString, 0, false);
1363
1364 // Install the @@toPrimitive function.
1365 Handle<JSFunction> to_primitive = InstallFunction(
1366 prototype, factory->to_primitive_symbol(), JS_OBJECT_TYPE,
1367 JSObject::kHeaderSize, MaybeHandle<JSObject>(),
1368 Builtins::kDatePrototypeToPrimitive,
1369 static_cast<PropertyAttributes>(DONT_ENUM | READ_ONLY));
1370
1371 // Set the expected parameters for @@toPrimitive to 1; required by builtin.
1372 to_primitive->shared()->set_internal_formal_parameter_count(1);
1373
1374 // Set the length for the function to satisfy ECMA-262.
1375 to_primitive->shared()->set_length(1);
1258 } 1376 }
1259 1377
1260 { // -- R e g E x p 1378 { // -- R e g E x p
1261 // Builtin functions for RegExp.prototype. 1379 // Builtin functions for RegExp.prototype.
1262 Handle<JSFunction> regexp_fun = 1380 Handle<JSFunction> regexp_fun =
1263 InstallFunction(global, "RegExp", JS_REGEXP_TYPE, JSRegExp::kSize, 1381 InstallFunction(global, "RegExp", JS_REGEXP_TYPE, JSRegExp::kSize,
1264 isolate->initial_object_prototype(), 1382 isolate->initial_object_prototype(),
1265 Builtins::kIllegal); 1383 Builtins::kIllegal);
1266 InstallWithIntrinsicDefaultProto(isolate, regexp_fun, 1384 InstallWithIntrinsicDefaultProto(isolate, regexp_fun,
1267 Context::REGEXP_FUNCTION_INDEX); 1385 Context::REGEXP_FUNCTION_INDEX);
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after
1620 } 1738 }
1621 1739
1622 { 1740 {
1623 // Set up the call-as-constructor delegate. 1741 // Set up the call-as-constructor delegate.
1624 Handle<Code> code = isolate->builtins()->HandleApiCallAsConstructor(); 1742 Handle<Code> code = isolate->builtins()->HandleApiCallAsConstructor();
1625 Handle<JSFunction> delegate = factory->NewFunction( 1743 Handle<JSFunction> delegate = factory->NewFunction(
1626 factory->empty_string(), code, JS_OBJECT_TYPE, JSObject::kHeaderSize); 1744 factory->empty_string(), code, JS_OBJECT_TYPE, JSObject::kHeaderSize);
1627 native_context()->set_call_as_constructor_delegate(*delegate); 1745 native_context()->set_call_as_constructor_delegate(*delegate);
1628 delegate->shared()->DontAdaptArguments(); 1746 delegate->shared()->DontAdaptArguments();
1629 } 1747 }
1630 } 1748 } // NOLINT(readability/fn_size)
1631 1749
1632 1750
1633 void Genesis::InstallTypedArray(const char* name, ElementsKind elements_kind, 1751 void Genesis::InstallTypedArray(const char* name, ElementsKind elements_kind,
1634 Handle<JSFunction>* fun) { 1752 Handle<JSFunction>* fun) {
1635 Handle<JSObject> global = Handle<JSObject>(native_context()->global_object()); 1753 Handle<JSObject> global = Handle<JSObject>(native_context()->global_object());
1636 Handle<JSFunction> result = InstallFunction( 1754 Handle<JSFunction> result = InstallFunction(
1637 global, name, JS_TYPED_ARRAY_TYPE, JSTypedArray::kSize, 1755 global, name, JS_TYPED_ARRAY_TYPE, JSTypedArray::kSize,
1638 isolate()->initial_object_prototype(), Builtins::kIllegal); 1756 isolate()->initial_object_prototype(), Builtins::kIllegal);
1639 1757
1640 Handle<Map> initial_map = isolate()->factory()->NewMap( 1758 Handle<Map> initial_map = isolate()->factory()->NewMap(
(...skipping 883 matching lines...) Expand 10 before | Expand all | Expand 10 after
2524 HeapObject::cast(string_function->initial_map()->prototype())->map()); 2642 HeapObject::cast(string_function->initial_map()->prototype())->map());
2525 2643
2526 // Install Global.eval. 2644 // Install Global.eval.
2527 { 2645 {
2528 Handle<JSFunction> eval = SimpleInstallFunction( 2646 Handle<JSFunction> eval = SimpleInstallFunction(
2529 handle(native_context()->global_object()), factory()->eval_string(), 2647 handle(native_context()->global_object()), factory()->eval_string(),
2530 Builtins::kGlobalEval, 1, false); 2648 Builtins::kGlobalEval, 1, false);
2531 native_context()->set_global_eval_fun(*eval); 2649 native_context()->set_global_eval_fun(*eval);
2532 } 2650 }
2533 2651
2534 // Setup the Date constructor.
2535 {
2536 Handle<String> key = factory()->Date_string();
2537 Handle<JSFunction> date_fun = Handle<JSFunction>::cast(
2538 Object::GetProperty(handle(native_context()->global_object()), key)
2539 .ToHandleChecked());
2540 Handle<JSObject> prototype =
2541 Handle<JSObject>(JSObject::cast(date_fun->instance_prototype()));
2542
2543 // Install the Date.now, Date.parse and Date.UTC functions.
2544 SimpleInstallFunction(date_fun, "now", Builtins::kDateNow, 0, false);
2545 SimpleInstallFunction(date_fun, "parse", Builtins::kDateParse, 1, false);
2546 SimpleInstallFunction(date_fun, "UTC", Builtins::kDateUTC, 7, false);
2547
2548 // Install the "constructor" property on the {prototype}.
2549 JSObject::AddProperty(prototype, factory()->constructor_string(), date_fun,
2550 DONT_ENUM);
2551
2552 // Install the toISOString and valueOf functions.
2553 SimpleInstallFunction(prototype, "toISOString",
2554 Builtins::kDatePrototypeToISOString, 0, false);
2555 SimpleInstallFunction(prototype, "getDate", Builtins::kDatePrototypeGetDate,
2556 0, true);
2557 SimpleInstallFunction(prototype, "getDay", Builtins::kDatePrototypeGetDay,
2558 0, true);
2559 SimpleInstallFunction(prototype, "getFullYear",
2560 Builtins::kDatePrototypeGetFullYear, 0, true);
2561 SimpleInstallFunction(prototype, "getHours",
2562 Builtins::kDatePrototypeGetHours, 0, true);
2563 SimpleInstallFunction(prototype, "getMilliseconds",
2564 Builtins::kDatePrototypeGetMilliseconds, 0, true);
2565 SimpleInstallFunction(prototype, "getMinutes",
2566 Builtins::kDatePrototypeGetMinutes, 0, true);
2567 SimpleInstallFunction(prototype, "getMonth",
2568 Builtins::kDatePrototypeGetMonth, 0, true);
2569 SimpleInstallFunction(prototype, "getSeconds",
2570 Builtins::kDatePrototypeGetSeconds, 0, true);
2571 SimpleInstallFunction(prototype, "getTime", Builtins::kDatePrototypeGetTime,
2572 0, true);
2573 SimpleInstallFunction(prototype, "getTimezoneOffset",
2574 Builtins::kDatePrototypeGetTimezoneOffset, 0, true);
2575 SimpleInstallFunction(prototype, "getUTCDate",
2576 Builtins::kDatePrototypeGetUTCDate, 0, true);
2577 SimpleInstallFunction(prototype, "getUTCDay",
2578 Builtins::kDatePrototypeGetUTCDay, 0, true);
2579 SimpleInstallFunction(prototype, "getUTCFullYear",
2580 Builtins::kDatePrototypeGetUTCFullYear, 0, true);
2581 SimpleInstallFunction(prototype, "getUTCHours",
2582 Builtins::kDatePrototypeGetUTCHours, 0, true);
2583 SimpleInstallFunction(prototype, "getUTCMilliseconds",
2584 Builtins::kDatePrototypeGetUTCMilliseconds, 0, true);
2585 SimpleInstallFunction(prototype, "getUTCMinutes",
2586 Builtins::kDatePrototypeGetUTCMinutes, 0, true);
2587 SimpleInstallFunction(prototype, "getUTCMonth",
2588 Builtins::kDatePrototypeGetUTCMonth, 0, true);
2589 SimpleInstallFunction(prototype, "getUTCSeconds",
2590 Builtins::kDatePrototypeGetUTCSeconds, 0, true);
2591 SimpleInstallFunction(prototype, "valueOf", Builtins::kDatePrototypeValueOf,
2592 0, false);
2593
2594 // Install the @@toPrimitive function.
2595 Handle<JSFunction> to_primitive = InstallFunction(
2596 prototype, factory()->to_primitive_symbol(), JS_OBJECT_TYPE,
2597 JSObject::kHeaderSize, MaybeHandle<JSObject>(),
2598 Builtins::kDatePrototypeToPrimitive,
2599 static_cast<PropertyAttributes>(DONT_ENUM | READ_ONLY));
2600
2601 // Set the expected parameters for @@toPrimitive to 1; required by builtin.
2602 to_primitive->shared()->set_internal_formal_parameter_count(1);
2603
2604 // Set the length for the function to satisfy ECMA-262.
2605 to_primitive->shared()->set_length(1);
2606 }
2607
2608 // Install Array.prototype.concat 2652 // Install Array.prototype.concat
2609 { 2653 {
2610 Handle<JSFunction> array_constructor(native_context()->array_function()); 2654 Handle<JSFunction> array_constructor(native_context()->array_function());
2611 Handle<JSObject> proto(JSObject::cast(array_constructor->prototype())); 2655 Handle<JSObject> proto(JSObject::cast(array_constructor->prototype()));
2612 Handle<JSFunction> concat = 2656 Handle<JSFunction> concat =
2613 InstallFunction(proto, "concat", JS_OBJECT_TYPE, JSObject::kHeaderSize, 2657 InstallFunction(proto, "concat", JS_OBJECT_TYPE, JSObject::kHeaderSize,
2614 MaybeHandle<JSObject>(), Builtins::kArrayConcat); 2658 MaybeHandle<JSObject>(), Builtins::kArrayConcat);
2615 2659
2616 // Make sure that Array.prototype.concat appears to be compiled. 2660 // Make sure that Array.prototype.concat appears to be compiled.
2617 // The code will never be called, but inline caching for call will 2661 // The code will never be called, but inline caching for call will
(...skipping 853 matching lines...) Expand 10 before | Expand all | Expand 10 after
3471 } 3515 }
3472 3516
3473 3517
3474 // Called when the top-level V8 mutex is destroyed. 3518 // Called when the top-level V8 mutex is destroyed.
3475 void Bootstrapper::FreeThreadResources() { 3519 void Bootstrapper::FreeThreadResources() {
3476 DCHECK(!IsActive()); 3520 DCHECK(!IsActive());
3477 } 3521 }
3478 3522
3479 } // namespace internal 3523 } // namespace internal
3480 } // namespace v8 3524 } // namespace v8
OLDNEW
« no previous file with comments | « BUILD.gn ('k') | src/builtins.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698