Commit 3c53e9ad authored by Frank Tang's avatar Frank Tang Committed by V8 LUCI CQ

[Temporal] Add PlainDateTime.prototype.withPlainTime

Spec text:
https://tc39.es/proposal-temporal/#sec-temporal.plaindatetime.prototype.withplaintime

Bug: v8:11544
Change-Id: I5277fb88675bb6d99b028a289329db06b95cc003
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3565026
Commit-Queue: Frank Tang <ftang@chromium.org>
Reviewed-by: 's avatarAdam Klein <adamk@chromium.org>
Cr-Commit-Position: refs/heads/main@{#80706}
parent 2fc37ae5
......@@ -88,8 +88,6 @@ TO_BE_IMPLEMENTED(TemporalPlainTimePrototypeToString)
TO_BE_IMPLEMENTED(TemporalPlainDateTimeCompare)
/* Temporal #sec-temporal.plaindatetime.prototype.with */
TO_BE_IMPLEMENTED(TemporalPlainDateTimePrototypeWith)
/* Temporal #sec-temporal.plaindatetime.prototype.withplainTime */
TO_BE_IMPLEMENTED(TemporalPlainDateTimePrototypeWithPlainTime)
/* Temporal #sec-temporal.plaindatetime.prototype.withplainDate */
TO_BE_IMPLEMENTED(TemporalPlainDateTimePrototypeWithPlainDate)
/* Temporal #sec-temporal.plaindatetime.prototype.add */
......@@ -485,6 +483,7 @@ TEMPORAL_GET_BY_INVOKE_CALENDAR_METHOD(PlainDateTime, MonthsInYear,
monthsInYear)
TEMPORAL_GET_BY_INVOKE_CALENDAR_METHOD(PlainDateTime, InLeapYear, inLeapYear)
TEMPORAL_PROTOTYPE_METHOD1(PlainDateTime, WithCalendar, withCalendar)
TEMPORAL_PROTOTYPE_METHOD1(PlainDateTime, WithPlainTime, withPlainTime)
TEMPORAL_GET_SMI(PlainDateTime, Hour, iso_hour)
TEMPORAL_GET_SMI(PlainDateTime, Minute, iso_minute)
TEMPORAL_GET_SMI(PlainDateTime, Second, iso_second)
......
......@@ -8198,6 +8198,46 @@ MaybeHandle<JSTemporalPlainDateTime> JSTemporalPlainDateTime::From(
return ToTemporalDateTime(isolate, item, options, method_name);
}
// #sec-temporal.plaindatetime.prototype.withplaintime
MaybeHandle<JSTemporalPlainDateTime> JSTemporalPlainDateTime::WithPlainTime(
Isolate* isolate, Handle<JSTemporalPlainDateTime> date_time,
Handle<Object> plain_time_like) {
// 1. Let temporalDateTime be the this value.
// 2. Perform ? RequireInternalSlot(temporalDateTime,
// [[InitializedTemporalDateTime]]).
// 3. If plainTimeLike is undefined, then
if (plain_time_like->IsUndefined()) {
// a. Return ? CreateTemporalDateTime(temporalDateTime.[[ISOYear]],
// temporalDateTime.[[ISOMonth]], temporalDateTime.[[ISODay]], 0, 0, 0, 0,
// 0, 0, temporalDateTime.[[Calendar]]).
return temporal::CreateTemporalDateTime(
isolate,
{{date_time->iso_year(), date_time->iso_month(), date_time->iso_day()},
{0, 0, 0, 0, 0, 0}},
handle(date_time->calendar(), isolate));
}
Handle<JSTemporalPlainTime> plain_time;
// 4. Let plainTime be ? ToTemporalTime(plainTimeLike).
ASSIGN_RETURN_ON_EXCEPTION(
isolate, plain_time,
temporal::ToTemporalTime(
isolate, plain_time_like, ShowOverflow::kConstrain,
"Temporal.PlainDateTime.prototype.withPlainTime"),
JSTemporalPlainDateTime);
// 5. Return ? CreateTemporalDateTime(temporalDateTime.[[ISOYear]],
// temporalDateTime.[[ISOMonth]], temporalDateTime.[[ISODay]],
// plainTime.[[ISOHour]], plainTime.[[ISOMinute]], plainTime.[[ISOSecond]],
// plainTime.[[ISOMillisecond]], plainTime.[[ISOMicrosecond]],
// plainTime.[[ISONanosecond]], temporalDateTime.[[Calendar]]).
return temporal::CreateTemporalDateTime(
isolate,
{{date_time->iso_year(), date_time->iso_month(), date_time->iso_day()},
{plain_time->iso_hour(), plain_time->iso_minute(),
plain_time->iso_second(), plain_time->iso_millisecond(),
plain_time->iso_microsecond(), plain_time->iso_nanosecond()}},
handle(date_time->calendar(), isolate));
}
// #sec-temporal.plaindatetime.prototype.withcalendar
MaybeHandle<JSTemporalPlainDateTime> JSTemporalPlainDateTime::WithCalendar(
Isolate* isolate, Handle<JSTemporalPlainDateTime> date_time,
......
......@@ -322,6 +322,11 @@ class JSTemporalPlainDateTime
Handle<Object> microsecond, Handle<Object> nanosecond,
Handle<Object> calendar_like);
// #sec-temporal.plaindatetime.prototype.withplaintime
V8_WARN_UNUSED_RESULT static MaybeHandle<JSTemporalPlainDateTime>
WithPlainTime(Isolate* isolate, Handle<JSTemporalPlainDateTime> date_time,
Handle<Object> temporal_time_like);
// #sec-temporal.plaindatetime.prototype.withcalendar
V8_WARN_UNUSED_RESULT static MaybeHandle<JSTemporalPlainDateTime>
WithCalendar(Isolate* isolate, Handle<JSTemporalPlainDateTime> date_time,
......
......@@ -72,7 +72,6 @@
'temporal/plain-date-time-to-plain-time': [FAIL],
'temporal/plain-date-time-with': [FAIL],
'temporal/plain-date-time-with-plain-date': [FAIL],
'temporal/plain-date-time-with-plain-time': [FAIL],
'temporal/plain-date-to-plain-date-time': [FAIL],
'temporal/plain-date-with': [FAIL],
......
......@@ -1060,17 +1060,7 @@
'built-ins/Temporal/PlainDateTime/prototype/withPlainDate/calendar-temporal-object': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/withPlainDate/infinity-throws-rangeerror': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/withPlainDate/subclassing-ignored': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-string-with-utc-designator': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-zoneddatetime-balance-negative-time-units': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-zoneddatetime-negative-epochnanoseconds': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-zoneddatetime-timezone-getoffsetnanosecondsfor-non-integer': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-zoneddatetime-timezone-getoffsetnanosecondsfor-not-callable': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-zoneddatetime-timezone-getoffsetnanosecondsfor-out-of-range': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-zoneddatetime-timezone-getoffsetnanosecondsfor-wrong-type': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/withPlainTime/branding': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/withPlainTime/plaintime-propertybag-no-time-units': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/withPlainTime/subclassing-ignored': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/withPlainTime/time-undefined': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/with/read-time-fields-before-datefromfields': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/with/subclassing-ignored': [FAIL],
'built-ins/Temporal/PlainMonthDay/from/calendar-monthdayfromfields-called-with-options-undefined': [FAIL],
......@@ -1710,7 +1700,6 @@
'built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/timezone-getoffsetnanosecondsfor-out-of-range': [FAIL],
'built-ins/Temporal/ZonedDateTime/prototype/withPlainDate/timezone-getoffsetnanosecondsfor-wrong-type': [FAIL],
'built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/argument-zoneddatetime-balance-negative-time-units': [FAIL],
'built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/calendar-temporal-object': [FAIL],
'built-ins/Temporal/ZonedDateTime/prototype/with/read-time-fields-before-datefromfields': [FAIL],
'built-ins/Temporal/ZonedDateTime/prototype/with/receiver-offset-broken': [FAIL],
'built-ins/Temporal/ZonedDateTime/prototype/with/subclassing-ignored': [FAIL],
......@@ -2125,10 +2114,6 @@
'built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-string-invalid': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-string-iso-calendar': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/withPlainDate/non-compatible-calendars-throw': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-object-insufficient-data': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-string-without-time-designator': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-time': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/withPlainTime/no-argument-default-to-midnight': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/with/string-throws': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/with/timezone-throws': [FAIL],
'built-ins/Temporal/PlainTime/prototype/toPlainDateTime/argument-string-invalid': [FAIL],
......@@ -2387,8 +2372,6 @@
'built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-propertybag-calendar-number': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-propertybag-calendar-wrong-type': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/withPlainDate/argument-wrong-type': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-number': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-wrong-type': [FAIL],
'built-ins/Temporal/PlainMonthDay/calendar-number': [FAIL],
'built-ins/Temporal/PlainMonthDay/from/argument-propertybag-calendar-number': [FAIL],
'built-ins/Temporal/PlainMonthDay/prototype/equals/argument-number': [FAIL],
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment