diff --git a/nova_vm/src/ecmascript/builtins/temporal/plain_time/plain_time_prototype.rs b/nova_vm/src/ecmascript/builtins/temporal/plain_time/plain_time_prototype.rs index c30ce60fd..5a70d75be 100644 --- a/nova_vm/src/ecmascript/builtins/temporal/plain_time/plain_time_prototype.rs +++ b/nova_vm/src/ecmascript/builtins/temporal/plain_time/plain_time_prototype.rs @@ -4,8 +4,8 @@ use crate::{ ecmascript::{ - Agent, ArgumentsList, BUILTIN_STRING_MEMORY, Behaviour, Builtin, BuiltinGetter, JsResult, - PropertyKey, Realm, String, Value, + Agent, ArgumentsList, BUILTIN_STRING_MEMORY, Behaviour, Builtin, BuiltinGetter, + ExceptionType, JsResult, PropertyKey, Realm, String, Value, builders::OrdinaryObjectBuilder, builtins::temporal::plain_time::{ add_duration_to_time, require_internal_slot_temporal_plain_time, @@ -90,6 +90,13 @@ impl Builtin for TemporalPlainTimePrototypeSubtract { const BEHAVIOUR: Behaviour = Behaviour::Regular(TemporalPlainTimePrototype::subtract); } +struct TemporalPlainTimePrototypeValueOf; +impl Builtin for TemporalPlainTimePrototypeValueOf { + const NAME: String<'static> = BUILTIN_STRING_MEMORY.valueOf; + const LENGTH: u8 = 0; + const BEHAVIOUR: Behaviour = Behaviour::Regular(TemporalPlainTimePrototype::value_of); +} + impl TemporalPlainTimePrototype { /// ### [4.3.4 get Temporal.PlainTime.prototype.minute](https://tc39.es/proposal-temporal/#sec-get-temporal.plaintime.prototype.minute) pub(crate) fn get_minute<'gc>( @@ -228,6 +235,21 @@ impl TemporalPlainTimePrototype { .map(Value::from) } + /// ### [4.3.19 Temporal.PlainTime.prototype.valueOf](https://tc39.es/proposal-temporal/#sec-temporal.plaintime.prototype.valueof) + fn value_of<'gc>( + agent: &mut Agent, + _: Value, + _: ArgumentsList, + gc: GcScope<'gc, '_>, + ) -> JsResult<'gc, Value<'gc>> { + // 1. Throw a TypeError exception. + Err(agent.throw_exception_with_static_message( + ExceptionType::TypeError, + "can't convert PlainTime to primitive type. Use PlainTime.prototype.equals() or PlainTime.compare() instead.", + gc.into_nogc(), + )) + } + pub(crate) fn create_intrinsic(agent: &mut Agent, realm: Realm<'static>, _: NoGcScope) { let intrinsics = agent.get_realm_record_by_id(realm).intrinsics(); let this = intrinsics.temporal_plain_time_prototype(); @@ -235,7 +257,7 @@ impl TemporalPlainTimePrototype { let plain_time_constructor = intrinsics.temporal_plain_time(); OrdinaryObjectBuilder::new_intrinsic_object(agent, realm, this) - .with_property_capacity(10) + .with_property_capacity(11) .with_prototype(object_prototype) .with_constructor_property(plain_time_constructor) .with_builtin_function_getter_property::() @@ -246,6 +268,7 @@ impl TemporalPlainTimePrototype { .with_builtin_function_getter_property::() .with_builtin_function_property::() .with_builtin_function_property::() + .with_builtin_function_property::() .with_property(|builder| { builder .with_key(WellKnownSymbols::ToStringTag.into()) diff --git a/tests/expectations.json b/tests/expectations.json index 63d771e26..be12ae643 100644 --- a/tests/expectations.json +++ b/tests/expectations.json @@ -4196,8 +4196,6 @@ "built-ins/Temporal/PlainTime/prototype/until/smallestunit-wrong-type.js": "FAIL", "built-ins/Temporal/PlainTime/prototype/until/year-zero.js": "FAIL", "built-ins/Temporal/PlainTime/prototype/valueOf/basic.js": "FAIL", - "built-ins/Temporal/PlainTime/prototype/valueOf/branding.js": "FAIL", - "built-ins/Temporal/PlainTime/prototype/valueOf/prop-desc.js": "FAIL", "built-ins/Temporal/PlainTime/prototype/with/argument-not-object.js": "FAIL", "built-ins/Temporal/PlainTime/prototype/with/basic.js": "FAIL", "built-ins/Temporal/PlainTime/prototype/with/branding.js": "FAIL", diff --git a/tests/metrics.json b/tests/metrics.json index 1224f17e2..9a8547133 100644 --- a/tests/metrics.json +++ b/tests/metrics.json @@ -1,8 +1,8 @@ { "results": { "crash": 52, - "fail": 6896, - "pass": 40404, + "fail": 6894, + "pass": 40406, "skip": 3326, "timeout": 18, "unresolved": 37