| Index: src/bootstrapper.cc
|
| diff --git a/src/bootstrapper.cc b/src/bootstrapper.cc
|
| index eba1be88717ef0a490e668a50dff762d537c3f4d..9608bbd053a331b8fb2832c06e50311aad78c68d 100644
|
| --- a/src/bootstrapper.cc
|
| +++ b/src/bootstrapper.cc
|
| @@ -1249,11 +1249,13 @@ void Genesis::InitializeGlobal(Handle<JSGlobalObject> global_object,
|
| // Builtin functions for Date.prototype.
|
| Handle<JSFunction> date_fun = InstallFunction(
|
| global, "Date", JS_DATE_TYPE, JSDate::kSize,
|
| - isolate->initial_object_prototype(), Builtins::kIllegal);
|
| + isolate->initial_object_prototype(), Builtins::kDateConstructor);
|
| InstallWithIntrinsicDefaultProto(isolate, date_fun,
|
| Context::DATE_FUNCTION_INDEX);
|
| date_fun->shared()->set_construct_stub(
|
| - *isolate->builtins()->JSBuiltinsConstructStub());
|
| + *isolate->builtins()->DateConstructor_ConstructStub());
|
| + date_fun->shared()->set_length(7);
|
| + date_fun->shared()->DontAdaptArguments();
|
| }
|
|
|
| { // -- R e g E x p
|
| @@ -2530,21 +2532,36 @@ bool Genesis::InstallNatives(ContextType context_type) {
|
| native_context()->set_global_eval_fun(*eval);
|
| }
|
|
|
| - // Install Date.prototype[@@toPrimitive].
|
| + // Setup the Date constructor.
|
| {
|
| Handle<String> key = factory()->Date_string();
|
| - Handle<JSFunction> date = Handle<JSFunction>::cast(
|
| + Handle<JSFunction> date_fun = Handle<JSFunction>::cast(
|
| Object::GetProperty(handle(native_context()->global_object()), key)
|
| .ToHandleChecked());
|
| - Handle<JSObject> proto =
|
| - Handle<JSObject>(JSObject::cast(date->instance_prototype()));
|
| + Handle<JSObject> prototype =
|
| + Handle<JSObject>(JSObject::cast(date_fun->instance_prototype()));
|
| +
|
| + // Install the Date.now, Date.parse and Date.UTC functions.
|
| + SimpleInstallFunction(date_fun, "now", Builtins::kDateNow, 0, false);
|
| + SimpleInstallFunction(date_fun, "parse", Builtins::kDateParse, 1, false);
|
| + SimpleInstallFunction(date_fun, "UTC", Builtins::kDateUTC, 7, false);
|
| +
|
| + // Install the "constructor" property on the {prototype}.
|
| + JSObject::AddProperty(prototype, factory()->constructor_string(), date_fun,
|
| + DONT_ENUM);
|
| +
|
| + // Install the toISOString and valueOf functions.
|
| + SimpleInstallFunction(prototype, "toISOString",
|
| + Builtins::kDatePrototypeToISOString, 0, false);
|
| + SimpleInstallFunction(prototype, "valueOf", Builtins::kDatePrototypeValueOf,
|
| + 0, false);
|
|
|
| // Install the @@toPrimitive function.
|
| - Handle<JSFunction> to_primitive =
|
| - InstallFunction(proto, factory()->to_primitive_symbol(), JS_OBJECT_TYPE,
|
| - JSObject::kHeaderSize, MaybeHandle<JSObject>(),
|
| - Builtins::kDateToPrimitive,
|
| - static_cast<PropertyAttributes>(DONT_ENUM | READ_ONLY));
|
| + Handle<JSFunction> to_primitive = InstallFunction(
|
| + prototype, factory()->to_primitive_symbol(), JS_OBJECT_TYPE,
|
| + JSObject::kHeaderSize, MaybeHandle<JSObject>(),
|
| + Builtins::kDatePrototypeToPrimitive,
|
| + static_cast<PropertyAttributes>(DONT_ENUM | READ_ONLY));
|
|
|
| // Set the expected parameters for @@toPrimitive to 1; required by builtin.
|
| to_primitive->shared()->set_internal_formal_parameter_count(1);
|
|
|