Browse Source

Create `Date` standard constructor (#2079)

Apparently we didn't have a `Date` intrinsic constructor, we were setting the prototype of all `Date` objects to the `Object` prototype.
pull/2078/head
jedel1043 2 years ago
parent
commit
29330225ef
  1. 8
      boa_engine/src/builtins/date/mod.rs
  2. 7
      boa_engine/src/context/intrinsics.rs

8
boa_engine/src/builtins/date/mod.rs

@ -91,7 +91,11 @@ impl BuiltIn for Date {
fn init(context: &mut Context) -> Option<JsValue> {
let _timer = Profiler::global().start_event(Self::NAME, "init");
ConstructorBuilder::new(context, Self::constructor)
ConstructorBuilder::with_standard_constructor(
context,
Self::constructor,
context.intrinsics().constructors().date().clone(),
)
.name(Self::NAME)
.length(Self::LENGTH)
.method(getter_method!(get_date), "getDate", 0)
@ -337,7 +341,7 @@ impl Date {
Ok(Self::make_date_string())
} else {
let prototype =
get_prototype_from_constructor(new_target, StandardConstructors::object, context)?;
get_prototype_from_constructor(new_target, StandardConstructors::date, context)?;
Ok(if args.is_empty() {
Self::make_date_now(prototype)
} else if args.len() == 1 {

7
boa_engine/src/context/intrinsics.rs

@ -74,6 +74,7 @@ impl StandardConstructor {
pub struct StandardConstructors {
object: StandardConstructor,
proxy: StandardConstructor,
date: StandardConstructor,
function: StandardConstructor,
generator: StandardConstructor,
generator_function: StandardConstructor,
@ -116,6 +117,7 @@ impl Default for StandardConstructors {
let result = Self {
object: StandardConstructor::default(),
proxy: StandardConstructor::default(),
date: StandardConstructor::default(),
function: StandardConstructor::default(),
generator: StandardConstructor::default(),
generator_function: StandardConstructor::default(),
@ -191,6 +193,11 @@ impl StandardConstructors {
&self.proxy
}
#[inline]
pub fn date(&self) -> &StandardConstructor {
&self.date
}
#[inline]
pub fn function(&self) -> &StandardConstructor {
&self.function

Loading…
Cancel
Save