Commit 40b099e3 authored by Frank Tang's avatar Frank Tang Committed by V8 LUCI CQ

[Temporal] Add Temporal.(Calendar|TimeZone).from

Bug: v8:11544
Change-Id: Iab90377372dcd97f1919fde1d886dfe67b336198
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3379236Reviewed-by: 's avatarShu-yu Guo <syg@chromium.org>
Commit-Queue: Frank Tang <ftang@chromium.org>
Cr-Commit-Position: refs/heads/main@{#78968}
parent 1288650e
......@@ -307,8 +307,6 @@ TO_BE_IMPLEMENTED(TemporalPlainMonthDayPrototypeToJSON)
TO_BE_IMPLEMENTED(TemporalPlainMonthDayPrototypeToPlainDate)
/* Temporal.TimeZone */
/* Temporal #sec-temporal.timezone.from */
TO_BE_IMPLEMENTED(TemporalTimeZoneFrom)
/* Temporal #sec-temporal.timezone.prototype.getoffsetnanosecondsfor */
TO_BE_IMPLEMENTED(TemporalTimeZonePrototypeGetOffsetNanosecondsFor)
/* Temporal #sec-temporal.timezone.prototype.getoffsetstringfor */
......@@ -327,8 +325,6 @@ TO_BE_IMPLEMENTED(TemporalTimeZonePrototypeGetPreviousTransition)
TO_BE_IMPLEMENTED(TemporalTimeZonePrototypeToJSON)
/* Temporal.Calendar */
/* Temporal #sec-temporal.calendar.from */
TO_BE_IMPLEMENTED(TemporalCalendarFrom)
/* Temporal #sec-temporal.calendar.prototype.datefromfields */
TO_BE_IMPLEMENTED(TemporalCalendarPrototypeDateFromFields)
/* Temporal #sec-temporal.calendar.prototype.yearmonthfromfields */
......@@ -788,11 +784,25 @@ TEMPORAL_GET_BIGINT_AFTER_DIVID(Instant, EpochMicroseconds, nanoseconds, 1000,
TEMPORAL_CONSTRUCTOR1(Calendar)
TEMPORAL_ID_BY_TO_STRING(Calendar)
TEMPORAL_TO_STRING(Calendar)
// #sec-temporal.calendar.from
BUILTIN(TemporalCalendarFrom) {
HandleScope scope(isolate);
RETURN_RESULT_OR_FAILURE(isolate, temporal::ToTemporalCalendar(
isolate, args.atOrUndefined(isolate, 1),
"Temporal.Calendar.from"));
}
// TimeZone
TEMPORAL_CONSTRUCTOR1(TimeZone)
TEMPORAL_ID_BY_TO_STRING(TimeZone)
TEMPORAL_TO_STRING(TimeZone)
// #sec-temporal.timezone.from
BUILTIN(TemporalTimeZoneFrom) {
HandleScope scope(isolate);
RETURN_RESULT_OR_FAILURE(isolate, temporal::ToTemporalTimeZone(
isolate, args.atOrUndefined(isolate, 1),
"Temporal.TimeZone.from"));
}
#ifdef V8_INTL_SUPPORT
// get Temporal.*.prototype.era/eraYear
......
......@@ -1298,6 +1298,9 @@ MaybeHandle<JSTemporalInstant> BuiltinTimeZoneGetInstantFor(
date_time, disambiguation, method);
}
} // namespace
namespace temporal {
// #sec-temporal-totemporalcalendar
MaybeHandle<JSReceiver> ToTemporalCalendar(
Isolate* isolate, Handle<Object> temporal_calendar_like,
......@@ -1371,6 +1374,9 @@ MaybeHandle<JSReceiver> ToTemporalCalendar(
return CreateTemporalCalendar(isolate, identifier);
}
} // namespace temporal
namespace {
// #sec-temporal-totemporalcalendarwithisodefault
MaybeHandle<JSReceiver> ToTemporalCalendarWithISODefault(
Isolate* isolate, Handle<Object> temporal_calendar_like,
......@@ -1383,9 +1389,12 @@ MaybeHandle<JSReceiver> ToTemporalCalendarWithISODefault(
return temporal::GetISO8601Calendar(isolate);
}
// 2. Return ? ToTemporalCalendar(temporalCalendarLike).
return ToTemporalCalendar(isolate, temporal_calendar_like, method);
return temporal::ToTemporalCalendar(isolate, temporal_calendar_like, method);
}
} // namespace
namespace temporal {
// #sec-temporal-totemporaltimezone
MaybeHandle<JSReceiver> ToTemporalTimeZone(
Isolate* isolate, Handle<Object> temporal_time_zone_like,
......@@ -1445,6 +1454,10 @@ MaybeHandle<JSReceiver> ToTemporalTimeZone(
return temporal::CreateTemporalTimeZone(isolate, result);
}
} // namespace temporal
namespace {
#define COMPARE_RESULT_TO_SIGN(r) \
((r) == ComparisonResult::kEqual \
? 0 \
......@@ -3782,9 +3795,10 @@ MaybeHandle<JSTemporalPlainDate> JSTemporalPlainDate::WithCalendar(
// [[InitializedTemporalDate]]).
// 3. Let calendar be ? ToTemporalCalendar(calendar).
Handle<JSReceiver> calendar;
ASSIGN_RETURN_ON_EXCEPTION(isolate, calendar,
ToTemporalCalendar(isolate, calendar_like, method),
JSTemporalPlainDate);
ASSIGN_RETURN_ON_EXCEPTION(
isolate, calendar,
temporal::ToTemporalCalendar(isolate, calendar_like, method),
JSTemporalPlainDate);
// 4. Return ? CreateTemporalDate(temporalDate.[[ISOYear]],
// temporalDate.[[ISOMonth]], temporalDate.[[ISODay]], calendar).
return CreateTemporalDate(isolate, temporal_date->iso_year(),
......@@ -3881,9 +3895,10 @@ MaybeHandle<JSTemporalPlainDateTime> JSTemporalPlainDateTime::WithCalendar(
// [[InitializedTemporalDateTime]]).
// 3. Let calendar be ? ToTemporalCalendar(calendar).
Handle<JSReceiver> calendar;
ASSIGN_RETURN_ON_EXCEPTION(isolate, calendar,
ToTemporalCalendar(isolate, calendar_like, method),
JSTemporalPlainDateTime);
ASSIGN_RETURN_ON_EXCEPTION(
isolate, calendar,
temporal::ToTemporalCalendar(isolate, calendar_like, method),
JSTemporalPlainDateTime);
// 4. Return ? CreateTemporalDateTime(temporalDateTime.[[ISOYear]],
// temporalDateTime.[[ISOMonth]], temporalDateTime.[[ISODay]],
// temporalDateTime.[[ISOHour]], temporalDateTime.[[ISOMinute]],
......@@ -4192,7 +4207,8 @@ MaybeHandle<JSTemporalZonedDateTime> JSTemporalZonedDateTime::Constructor(
// 4. Let timeZone be ? ToTemporalTimeZone(timeZoneLike).
Handle<JSReceiver> time_zone;
ASSIGN_RETURN_ON_EXCEPTION(
isolate, time_zone, ToTemporalTimeZone(isolate, time_zone_like, method),
isolate, time_zone,
temporal::ToTemporalTimeZone(isolate, time_zone_like, method),
JSTemporalZonedDateTime);
// 5. Let calendar be ? ToTemporalCalendarWithISODefault(calendarLike).
......@@ -4219,9 +4235,10 @@ MaybeHandle<JSTemporalZonedDateTime> JSTemporalZonedDateTime::WithCalendar(
// [[InitializedTemporalZonedDateTime]]).
// 3. Let calendar be ? ToTemporalCalendar(calendarLike).
Handle<JSReceiver> calendar;
ASSIGN_RETURN_ON_EXCEPTION(isolate, calendar,
ToTemporalCalendar(isolate, calendar_like, method),
JSTemporalZonedDateTime);
ASSIGN_RETURN_ON_EXCEPTION(
isolate, calendar,
temporal::ToTemporalCalendar(isolate, calendar_like, method),
JSTemporalZonedDateTime);
// 4. Return ? CreateTemporalZonedDateTime(zonedDateTime.[[Nanoseconds]],
// zonedDateTime.[[TimeZone]], calendar).
......@@ -4242,7 +4259,8 @@ MaybeHandle<JSTemporalZonedDateTime> JSTemporalZonedDateTime::WithTimeZone(
// 3. Let timeZone be ? ToTemporalTimeZone(timeZoneLike).
Handle<JSReceiver> time_zone;
ASSIGN_RETURN_ON_EXCEPTION(
isolate, time_zone, ToTemporalTimeZone(isolate, time_zone_like, method),
isolate, time_zone,
temporal::ToTemporalTimeZone(isolate, time_zone_like, method),
JSTemporalZonedDateTime);
// 4. Return ? CreateTemporalZonedDateTime(zonedDateTime.[[Nanoseconds]],
......
......@@ -346,6 +346,14 @@ V8_WARN_UNUSED_RESULT MaybeHandle<Object> InvokeCalendarMethod(
Isolate* isolate, Handle<JSReceiver> calendar, Handle<String> name,
Handle<JSReceiver> temporal_like);
V8_WARN_UNUSED_RESULT MaybeHandle<JSReceiver> ToTemporalCalendar(
Isolate* isolate, Handle<Object> temporal_calendar_like,
const char* method);
V8_WARN_UNUSED_RESULT MaybeHandle<JSReceiver> ToTemporalTimeZone(
Isolate* isolate, Handle<Object> temporal_time_zone_like,
const char* method);
} // namespace temporal
} // namespace internal
} // namespace v8
......
......@@ -53,7 +53,6 @@
'temporal/calendar-days-in-week': [FAIL],
'temporal/calendar-days-in-year': [FAIL],
'temporal/calendar-fields': [FAIL],
'temporal/calendar-from': [FAIL],
'temporal/calendar-in-leap-year': [FAIL],
'temporal/calendar-merge-fields': [FAIL],
'temporal/calendar-month': [FAIL],
......
......@@ -318,6 +318,8 @@
'built-ins/Temporal/Duration/prototype/add/balance-negative-result': [FAIL],
'built-ins/Temporal/Duration/prototype/negated/subclassing-ignored': [FAIL],
'built-ins/Temporal/TimeZone/from/argument-valid': [SKIP],
# incorect calculation
# https://github.com/tc39/test262/pull/3250
'built-ins/Temporal/PlainDate/prototype/since/largestunit-higher-units': [FAIL],
......@@ -419,11 +421,6 @@
'built-ins/Temporal/Duration/prototype/with/non-integer-throws-rangeerror': [FAIL],
'built-ins/Temporal/Duration/prototype/with/order-of-operations': [FAIL],
'built-ins/Temporal/Calendar/from/calendar-object': [FAIL],
'built-ins/Temporal/Calendar/from/calendar-object-operations': [FAIL],
'built-ins/Temporal/Calendar/from/calendar-string-builtin': [FAIL],
'built-ins/Temporal/Calendar/from/calendar-temporal-object': [FAIL],
'built-ins/Temporal/Calendar/from/subclassing-ignored': [FAIL],
'built-ins/Temporal/Calendar/prototype/dateAdd/add-days': [FAIL],
'built-ins/Temporal/Calendar/prototype/dateAdd/add-months': [FAIL],
'built-ins/Temporal/Calendar/prototype/dateAdd/add-months-weeks': [FAIL],
......@@ -1537,8 +1534,6 @@
'built-ins/Temporal/PlainMonthDay/from/overflow-undefined': [FAIL],
'built-ins/Temporal/PlainMonthDay/from/overflow-wrong-type': [FAIL],
'built-ins/Temporal/PlainMonthDay/from/subclassing-ignored': [FAIL],
'built-ins/Temporal/PlainMonthDay/infinity-throws-rangeerror': [FAIL],
'built-ins/Temporal/PlainMonthDay/negative-infinity-throws-rangeerror': [FAIL],
'built-ins/Temporal/PlainMonthDay/prototype/day/basic': [FAIL],
'built-ins/Temporal/PlainMonthDay/prototype/equals/argument-string-with-utc-designator': [FAIL],
'built-ins/Temporal/PlainMonthDay/prototype/equals/argument-wrong-type': [FAIL],
......@@ -1788,8 +1783,6 @@
'built-ins/Temporal/PlainYearMonth/from/overflow-undefined': [FAIL],
'built-ins/Temporal/PlainYearMonth/from/overflow-wrong-type': [FAIL],
'built-ins/Temporal/PlainYearMonth/from/subclassing-ignored': [FAIL],
'built-ins/Temporal/PlainYearMonth/infinity-throws-rangeerror': [FAIL],
'built-ins/Temporal/PlainYearMonth/negative-infinity-throws-rangeerror': [FAIL],
'built-ins/Temporal/PlainYearMonth/prototype/add/argument-not-object': [FAIL],
'built-ins/Temporal/PlainYearMonth/prototype/add/argument-string': [FAIL],
'built-ins/Temporal/PlainYearMonth/prototype/add/argument-string-negative-fractional-units': [FAIL],
......@@ -1915,11 +1908,8 @@
'built-ins/Temporal/PlainYearMonth/prototype/with/overflow-undefined': [FAIL],
'built-ins/Temporal/PlainYearMonth/prototype/with/overflow-wrong-type': [FAIL],
'built-ins/Temporal/PlainYearMonth/prototype/with/subclassing-ignored': [FAIL],
'built-ins/Temporal/TimeZone/from/argument-object': [FAIL],
'built-ins/Temporal/TimeZone/from/argument-object-invalid': [FAIL],
'built-ins/Temporal/TimeZone/from/argument-primitive': [FAIL],
'built-ins/Temporal/TimeZone/from/argument-valid': [FAIL],
'built-ins/Temporal/TimeZone/from/subclassing-ignored': [FAIL],
'built-ins/Temporal/TimeZone/from/timezone-string-datetime': [FAIL],
'built-ins/Temporal/TimeZone/from/timezone-string-multiple-offsets': [FAIL],
'built-ins/Temporal/TimeZone/prototype/getInstantFor/argument-not-datetime': [FAIL],
......@@ -2417,7 +2407,6 @@
'intl402/DateTimeFormat/prototype/formatRangeToParts/temporal-objects-resolved-time-zone': [FAIL],
'intl402/DateTimeFormat/prototype/format/temporal-objects-resolved-time-zone': [FAIL],
'intl402/DateTimeFormat/prototype/formatToParts/temporal-objects-resolved-time-zone': [FAIL],
'intl402/Temporal/Calendar/from/basic': [FAIL],
'intl402/Temporal/Calendar/prototype/dateAdd/date-infinity-throws-rangeerror': [FAIL],
'intl402/Temporal/Calendar/prototype/dateFromFields/infinity-throws-rangeerror': [FAIL],
'intl402/Temporal/Calendar/prototype/dateUntil/argument-infinity-throws-rangeerror': [FAIL],
......@@ -2496,8 +2485,6 @@
'intl402/Temporal/PlainYearMonth/prototype/toLocaleString/resolved-time-zone': [FAIL],
'intl402/Temporal/PlainYearMonth/prototype/toLocaleString/timezone-getoffsetnanosecondsfor-not-callable': [FAIL],
'intl402/Temporal/PlainYearMonth/prototype/until/infinity-throws-rangeerror': [FAIL],
'intl402/Temporal/TimeZone/from/argument-object': [FAIL],
'intl402/Temporal/TimeZone/from/argument-valid': [FAIL],
'intl402/Temporal/TimeZone/prototype/getInstantFor/infinity-throws-rangeerror': [FAIL],
'intl402/Temporal/TimeZone/prototype/getOffsetNanosecondsFor/instant-string': [FAIL],
'intl402/Temporal/TimeZone/prototype/getOffsetStringFor/instant-string': [FAIL],
......@@ -2533,7 +2520,6 @@
'intl402/Temporal/PlainDate/prototype/toZonedDateTime/timezone-string-datetime': [FAIL],
'intl402/Temporal/PlainDateTime/prototype/toZonedDateTime/timezone-string-datetime': [FAIL],
'intl402/Temporal/PlainTime/prototype/toZonedDateTime/timezone-string-datetime': [FAIL],
'intl402/Temporal/TimeZone/from/timezone-string-datetime': [FAIL],
'intl402/Temporal/ZonedDateTime/from/timezone-string-datetime': [FAIL],
'intl402/Temporal/ZonedDateTime/prototype/equals/timezone-string-datetime': [FAIL],
'intl402/Temporal/ZonedDateTime/prototype/since/timezone-string-datetime': [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