[Temporal] Fix limits tests

1. Add if/throw based on IsValidEpochNanoseconds()
in DisambiguatePossibleInstants, ParseTemporalInstant, GetIANATimeZoneEpochValueAsArrayOfInstantForUTC,
GetIANATimeZoneEpochValueAsArrayOfInstant,
JSTemporalTimeZone::GetPossibleInstantsFor, and
InterpretISODateTimeOffset(
2. Add assert IsValidEpochNanoseconds in GetISOPartsFromEpoch
3. Fix ISODateTimeWithinLimits

These changes are syncing of the following PRs:
https://github.com/tc39/proposal-temporal/pull/2277
https://github.com/tc39/proposal-temporal/pull/2084
https://github.com/tc39/proposal-temporal/pull/2312
https://github.com/tc39/proposal-temporal/pull/2273
https://github.com/tc39/proposal-temporal/pull/2117

Spec Text:
https://tc39.es/proposal-temporal/#sec-temporal-disambiguatepossibleinstants
https://tc39.es/proposal-temporal/#sec-temporal-parsetemporalinstant
https://tc39.es/proposal-temporal/#sec-temporal.timezone.prototype.getpossibleinstantsfor
https://tc39.es/proposal-temporal/#sec-temporal-interpretisodatetimeoffset
https://tc39.es/proposal-temporal/#sec-temporal-getisopartsfromepoch
https://tc39.es/proposal-temporal/#sec-temporal-isodatetimewithinlimits


Bug: v8:11544
Change-Id: I38244d039f33e294b698d470b587b1b44b72fa09
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3831150
Reviewed-by: Adam Klein <adamk@chromium.org>
Commit-Queue: Frank Tang <ftang@chromium.org>
Cr-Commit-Position: refs/heads/main@{#82548}
This commit is contained in:
Frank Tang 2022-08-17 14:01:37 -07:00 committed by V8 LUCI CQ
parent 7e86bb86f1
commit d5f29b929c
2 changed files with 101 additions and 81 deletions

View File

@ -550,22 +550,29 @@ bool ISODateTimeWithinLimits(Isolate* isolate,
* = (-86400 x 100000001 , 86400 x 100000001 ) second
* = (-100000001, 100000001) days => Because 60*60*24 = 86400
* 100000001 days is about 273790 years, 11 months and 4 days.
* Therefore 100000001 days before Jan 1 1970 is around Jan 26, -271819 and
* 100000001 days after Jan 1 1970 is around Nov 4, 275760.
* Therefore 100000001 days before Jan 1 1970 is around Apr 19, -271821 and
* 100000001 days after Jan 1 1970 is around Sept 13, 275760.
*/
if (date_time.date.year > -271819 && date_time.date.year < 275760)
if (date_time.date.year > -271821 && date_time.date.year < 275760)
return true;
if (date_time.date.year < -271819 || date_time.date.year > 275760)
if (date_time.date.year < -271821 || date_time.date.year > 275760)
return false;
if (date_time.date.year == -271819) {
if (date_time.date.month > 11) return true;
if (date_time.date.month < 11) return false;
return (date_time.date.day > 4);
if (date_time.date.year == -271821) {
if (date_time.date.month > 4) return true;
if (date_time.date.month < 4) return false;
if (date_time.date.day > 19) return true;
if (date_time.date.day < 19) return false;
if (date_time.time.hour > 0) return true;
if (date_time.time.minute > 0) return true;
if (date_time.time.second > 0) return true;
if (date_time.time.millisecond > 0) return true;
if (date_time.time.microsecond > 0) return true;
return date_time.time.nanosecond > 0;
} else {
DCHECK_EQ(date_time.date.year, 275760);
if (date_time.date.month > 1) return false;
if (date_time.date.month < 1) return true;
return (date_time.date.day > 26);
if (date_time.date.month > 9) return false;
if (date_time.date.month < 9) return true;
return date_time.date.day < 14;
}
// 1. Assert: year, month, day, hour, minute, second, millisecond,
// microsecond, and nanosecond are integers.
@ -1247,7 +1254,9 @@ DateTimeRecordCommon GetISOPartsFromEpoch(Isolate* isolate,
Handle<BigInt> epoch_nanoseconds) {
TEMPORAL_ENTER_FUNC();
DateTimeRecordCommon result;
// 1. Let remainderNs be epochNanoseconds modulo 10^6.
// 1. Assert: ! IsValidEpochNanoseconds((epochNanoseconds)) is true.
DCHECK(IsValidEpochNanoseconds(isolate, epoch_nanoseconds));
// 2. Let remainderNs be epochNanoseconds modulo 10^6.
Handle<BigInt> million = BigInt::FromInt64(isolate, 1000000);
Handle<BigInt> remainder_ns =
BigInt::Remainder(isolate, epoch_nanoseconds, million).ToHandleChecked();
@ -1257,7 +1266,7 @@ DateTimeRecordCommon GetISOPartsFromEpoch(Isolate* isolate,
BigInt::Add(isolate, remainder_ns, million).ToHandleChecked();
}
// 2. Let epochMilliseconds be (epochNanoseconds remainderNs) / 10^6.
// 3. Let epochMilliseconds be (epochNanoseconds remainderNs) / 10^6.
int64_t epoch_milliseconds =
BigInt::Divide(isolate,
BigInt::Subtract(isolate, epoch_nanoseconds, remainder_ns)
@ -1276,41 +1285,45 @@ DateTimeRecordCommon GetISOPartsFromEpoch(Isolate* isolate,
isolate->date_cache()->BreakDownTime(epoch_milliseconds, &year, &month, &day,
&wday, &hour, &min, &sec, &ms);
// 3. Let year be ! YearFromTime(epochMilliseconds).
// 4. Let year be ! YearFromTime(epochMilliseconds).
result.date.year = year;
// 4. Let month be ! MonthFromTime(epochMilliseconds) + 1.
// 5. Let month be ! MonthFromTime(epochMilliseconds) + 1.
result.date.month = month + 1;
DCHECK_GE(result.date.month, 1);
DCHECK_LE(result.date.month, 12);
// 5. Let day be ! DateFromTime(epochMilliseconds).
// 6. Let day be ! DateFromTime(epochMilliseconds).
result.date.day = day;
DCHECK_GE(result.date.day, 1);
DCHECK_LE(result.date.day, 31);
// 6. Let hour be ! HourFromTime(epochMilliseconds).
// 7. Let hour be ! HourFromTime(epochMilliseconds).
result.time.hour = hour;
DCHECK_GE(result.time.hour, 0);
DCHECK_LE(result.time.hour, 23);
// 7. Let minute be ! MinFromTime(epochMilliseconds).
// 8. Let minute be ! MinFromTime(epochMilliseconds).
result.time.minute = min;
DCHECK_GE(result.time.minute, 0);
DCHECK_LE(result.time.minute, 59);
// 8. Let second be ! SecFromTime(epochMilliseconds).
// 9. Let second be ! SecFromTime(epochMilliseconds).
result.time.second = sec;
DCHECK_GE(result.time.second, 0);
DCHECK_LE(result.time.second, 59);
// 9. Let millisecond be ! msFromTime(epochMilliseconds).
// 10. Let millisecond be ! msFromTime(epochMilliseconds).
result.time.millisecond = ms;
DCHECK_GE(result.time.millisecond, 0);
DCHECK_LE(result.time.millisecond, 999);
// 10. Let microsecond be floor(remainderNs / 1000) modulo 1000.
// 11. Let microsecond be floor(remainderNs / 1000) modulo 1000.
int64_t remainder = remainder_ns->AsInt64();
result.time.microsecond = (remainder / 1000) % 1000;
DCHECK_GE(result.time.microsecond, 0);
// 12. 12. Assert: microsecond < 1000.
DCHECK_LE(result.time.microsecond, 999);
// 11. Let nanosecond be remainderNs modulo 1000.
// 13. Let nanosecond be remainderNs modulo 1000.
result.time.nanosecond = remainder % 1000;
DCHECK_GE(result.time.nanosecond, 0);
DCHECK_LE(result.time.nanosecond, 999);
// 14. Return the Record { [[Year]]: year, [[Month]]: month, [[Day]]: day,
// [[Hour]]: hour, [[Minute]]: minute, [[Second]]: second, [[Millisecond]]:
// millisecond, [[Microsecond]]: microsecond, [[Nanosecond]]: nanosecond }.
return result;
}
@ -1766,18 +1779,30 @@ MaybeHandle<JSTemporalInstant> DisambiguatePossibleInstants(
date_time->iso_millisecond(), date_time->iso_microsecond(),
date_time->iso_nanosecond()}});
// 8. Let dayBefore be ! CreateTemporalInstant(epochNanoseconds 8.64 ×
// 10^13).
// 8. Let dayBeforeNs be epochNanoseconds - (nsPerDay).
Handle<BigInt> one_day_in_ns = BigInt::FromUint64(isolate, 86400000000000ULL);
Handle<BigInt> day_before_ns =
BigInt::Subtract(isolate, epoch_nanoseconds, one_day_in_ns)
.ToHandleChecked();
// 9. If ! IsValidEpochNanoseconds(dayBeforeNs) is false, throw a RangeError
// exception.
if (!IsValidEpochNanoseconds(isolate, day_before_ns)) {
THROW_NEW_ERROR(isolate, NEW_TEMPORAL_INVALID_ARG_RANGE_ERROR(),
JSTemporalInstant);
}
// 10. Let dayBefore be ! CreateTemporalInstant(dayBeforeNs).
Handle<JSTemporalInstant> day_before =
temporal::CreateTemporalInstant(isolate, day_before_ns).ToHandleChecked();
// 9. Let dayAfter be ! CreateTemporalInstant(epochNanoseconds + 8.64 ×
// 10^13).
// 11. Let dayAfterNs be epochNanoseconds + (nsPerDay).
Handle<BigInt> day_after_ns =
BigInt::Add(isolate, epoch_nanoseconds, one_day_in_ns).ToHandleChecked();
// 12. If ! IsValidEpochNanoseconds(dayAfterNs) is false, throw a RangeError
// exception.
if (!IsValidEpochNanoseconds(isolate, day_after_ns)) {
THROW_NEW_ERROR(isolate, NEW_TEMPORAL_INVALID_ARG_RANGE_ERROR(),
JSTemporalInstant);
}
// 13. Let dayAfter be ! CreateTemporalInstant(dayAfterNs).
Handle<JSTemporalInstant> day_after =
temporal::CreateTemporalInstant(isolate, day_after_ns).ToHandleChecked();
// 10. Let offsetBefore be ? GetOffsetNanosecondsFor(timeZone, dayBefore).
@ -3584,7 +3609,6 @@ MaybeHandle<BigInt> ParseTemporalInstant(Isolate* isolate,
Handle<String> iso_string) {
TEMPORAL_ENTER_FUNC();
Factory* factory = isolate->factory();
// 1. Assert: Type(isoString) is String.
// 2. Let result be ? ParseTemporalInstantString(isoString).
InstantRecord result;
@ -3602,15 +3626,7 @@ MaybeHandle<BigInt> ParseTemporalInstant(Isolate* isolate,
Handle<BigInt> utc =
GetEpochFromISOParts(isolate, {result.date, result.time});
// 6. If utc < 8.64 × 10^21 or utc > 8.64 × 10^21, then
if ((BigInt::CompareToNumber(utc, factory->NewNumber(-8.64e21)) ==
ComparisonResult::kLessThan) ||
(BigInt::CompareToNumber(utc, factory->NewNumber(8.64e21)) ==
ComparisonResult::kGreaterThan)) {
// a. Throw a RangeError exception.
THROW_NEW_ERROR(isolate, NEW_TEMPORAL_INVALID_ARG_RANGE_ERROR(), BigInt);
}
// 7. Let offsetNanoseconds be ? ParseTimeZoneOffsetString(offsetString).
// 6. Let offsetNanoseconds be ? ParseTimeZoneOffsetString(offsetString).
int64_t offset_nanoseconds;
DCHECK(result.offset_string->IsString());
MAYBE_ASSIGN_RETURN_ON_EXCEPTION_VALUE(
@ -3619,9 +3635,18 @@ MaybeHandle<BigInt> ParseTemporalInstant(Isolate* isolate,
Handle<String>::cast(result.offset_string)),
Handle<BigInt>());
// 8. Return utc offsetNanoseconds.
return BigInt::Subtract(isolate, utc,
BigInt::FromInt64(isolate, offset_nanoseconds));
// 7. Let result be utc - (offsetNanoseconds).
Handle<BigInt> result_value =
BigInt::Subtract(isolate, utc,
BigInt::FromInt64(isolate, offset_nanoseconds))
.ToHandleChecked();
// 8. If ! IsValidEpochNanoseconds(result) is false, then
if (!IsValidEpochNanoseconds(isolate, result_value)) {
// a. Throw a RangeError exception.
THROW_NEW_ERROR(isolate, NEW_TEMPORAL_INVALID_ARG_RANGE_ERROR(), BigInt);
}
// 9. Return result.
return result_value;
}
// #sec-temporal-parsetemporalzoneddatetimestring
@ -10963,11 +10988,16 @@ MaybeHandle<JSArray> GetIANATimeZoneEpochValueAsArrayOfInstantForUTC(
Handle<BigInt> epoch_nanoseconds = GetEpochFromISOParts(isolate, date_time);
Handle<FixedArray> fixed_array = factory->NewFixedArray(1);
// 7. For each value epochNanoseconds in possibleEpochNanoseconds, do
// a. Let instant be ! CreateTemporalInstant(epochNanoseconds).
// a. If ! IsValidEpochNanoseconds(epochNanoseconds) is false, throw a
// RangeError exception.
if (!IsValidEpochNanoseconds(isolate, epoch_nanoseconds)) {
THROW_NEW_ERROR(isolate, NEW_TEMPORAL_INVALID_ARG_RANGE_ERROR(), JSArray);
}
// b. Let instant be ! CreateTemporalInstant(epochNanoseconds).
Handle<JSTemporalInstant> instant =
temporal::CreateTemporalInstant(isolate, epoch_nanoseconds)
.ToHandleChecked();
// b. Append instant to possibleInstants.
// c. Append instant to possibleInstants.
fixed_array->set(0, *instant);
// 8. Return ! CreateArrayFromList(possibleInstants).
return factory->NewJSArrayWithElements(fixed_array);
@ -11001,12 +11031,18 @@ MaybeHandle<JSArray> GetIANATimeZoneEpochValueAsArrayOfInstant(
for (int32_t i = 0; i < array_length; i++) {
int64_t offset_in_nanoseconds =
possible_offset_in_milliseconds[i] * 1000000;
Handle<BigInt> epoch_nanoseconds =
BigInt::Subtract(isolate, nanoseconds_in_local_time,
BigInt::FromInt64(isolate, offset_in_nanoseconds))
.ToHandleChecked();
// a. If ! IsValidEpochNanoseconds(epochNanoseconds) is false, throw a
// RangeError exception.
if (!IsValidEpochNanoseconds(isolate, epoch_nanoseconds)) {
THROW_NEW_ERROR(isolate, NEW_TEMPORAL_INVALID_ARG_RANGE_ERROR(), JSArray);
}
// b. Let instant be ! CreateTemporalInstant(epochNanoseconds).
Handle<JSTemporalInstant> instant =
temporal::CreateTemporalInstant(
isolate,
BigInt::Subtract(isolate, nanoseconds_in_local_time,
BigInt::FromInt64(isolate, offset_in_nanoseconds))
.ToHandleChecked())
temporal::CreateTemporalInstant(isolate, epoch_nanoseconds)
.ToHandleChecked();
// b. Append instant to possibleInstants.
fixed_array->set(i, *(instant));
@ -11055,6 +11091,12 @@ MaybeHandle<JSArray> JSTemporalTimeZone::GetPossibleInstantsFor(
// dateTime.[[ISONanosecond]]).
Handle<BigInt> epoch_nanoseconds =
GetEpochFromISOParts(isolate, date_time_record);
// a. If ! IsValidEpochNanoseconds(epochNanoseconds) is false, throw a
// RangeError exception.
if (!IsValidEpochNanoseconds(isolate, epoch_nanoseconds)) {
THROW_NEW_ERROR(isolate, NEW_TEMPORAL_INVALID_ARG_RANGE_ERROR(), JSArray);
}
// b. Let instant be ! CreateTemporalInstant(epochNanoseconds
// timeZone.[[OffsetNanoseconds]]).
Handle<JSTemporalInstant> instant =
@ -16151,10 +16193,18 @@ MaybeHandle<BigInt> InterpretISODateTimeOffset(
Handle<BigInt> epoch_nanoseconds =
GetEpochFromISOParts(isolate, {data.date, data.time});
// b. Return epochNanoseconds offsetNanoseconds.
return BigInt::Subtract(isolate, epoch_nanoseconds,
BigInt::FromInt64(isolate, offset_nanoseconds))
.ToHandleChecked();
// b. Set epochNanoseconds to epochNanoseconds - (offsetNanoseconds).
epoch_nanoseconds =
BigInt::Subtract(isolate, epoch_nanoseconds,
BigInt::FromInt64(isolate, offset_nanoseconds))
.ToHandleChecked();
// c. If ! IsValidEpochNanoseconds(epochNanoseconds) is false, throw a
// RangeError exception.
if (!IsValidEpochNanoseconds(isolate, epoch_nanoseconds)) {
THROW_NEW_ERROR(isolate, NEW_TEMPORAL_INVALID_ARG_RANGE_ERROR(), BigInt);
}
// d. Return epochNanoseconds.
return epoch_nanoseconds;
}
// 6. Assert: offsetBehaviour is option.
DCHECK_EQ(offset_behaviour, OffsetBehaviour::kOption);

View File

@ -474,28 +474,21 @@
'built-ins/Temporal/Instant/prototype/toZonedDateTime/timezone-string-multiple-offsets': [FAIL],
'built-ins/Temporal/Now/zonedDateTimeISO/timezone-string-multiple-offsets': [FAIL],
'built-ins/Temporal/Now/zonedDateTime/timezone-string-multiple-offsets': [FAIL],
'built-ins/Temporal/PlainDate/from/limits': [FAIL],
'built-ins/Temporal/PlainDate/limits': [FAIL],
'built-ins/Temporal/PlainDate/prototype/add/limits': [FAIL],
'built-ins/Temporal/PlainDate/prototype/subtract/limits': [FAIL],
'built-ins/Temporal/PlainDate/prototype/toZonedDateTime/timezone-string-multiple-offsets': [FAIL],
'built-ins/Temporal/PlainDate/prototype/weekOfYear/basic': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/add/argument-string-negative-fractional-units': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/since/argument-zoneddatetime-negative-epochnanoseconds': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/since/balance-negative-duration': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/toPlainDate/limits': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/timezone-string-multiple-offsets': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/until/argument-zoneddatetime-negative-epochnanoseconds': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/until/balance': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/until/balance-negative-duration': [FAIL],
'built-ins/Temporal/PlainMonthDay/prototype/toPlainDate/limits': [FAIL],
'built-ins/Temporal/PlainTime/prototype/add/argument-string-negative-fractional-units': [FAIL],
'built-ins/Temporal/PlainTime/prototype/toZonedDateTime/timezone-string-multiple-offsets': [FAIL],
'built-ins/Temporal/PlainYearMonth/prototype/add/calendar-arguments': [FAIL],
'built-ins/Temporal/PlainYearMonth/prototype/add/overflow-wrong-type': [FAIL],
'built-ins/Temporal/PlainYearMonth/prototype/subtract/calendar-arguments': [FAIL],
'built-ins/Temporal/PlainYearMonth/prototype/subtract/overflow-wrong-type': [FAIL],
'built-ins/Temporal/PlainYearMonth/prototype/toPlainDate/limits': [FAIL],
'built-ins/Temporal/TimeZone/from/timezone-string-multiple-offsets': [FAIL],
'built-ins/Temporal/ZonedDateTime/compare/zoneddatetime-string': [FAIL],
'built-ins/Temporal/ZonedDateTime/compare/zoneddatetime-string-multiple-offsets': [FAIL],
@ -524,7 +517,6 @@
'intl402/Temporal/PlainYearMonth/from/argument-object': [FAIL],
'built-ins/Temporal/Calendar/prototype/weekOfYear/year-zero': [FAIL],
'built-ins/Temporal/PlainDate/prototype/toPlainDateTime/argument-string-no-implicit-midnight': [FAIL],
'built-ins/Temporal/PlainDate/prototype/toPlainYearMonth/limits': [FAIL],
'built-ins/Temporal/PlainDate/prototype/toZonedDateTime/argument-string-no-implicit-midnight': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-string-no-implicit-midnight': [FAIL],
'built-ins/Temporal/PlainTime/compare/argument-string-no-implicit-midnight': [FAIL],
@ -621,14 +613,6 @@
'built-ins/Temporal/Calendar/prototype/weekOfYear/argument-propertybag-calendar-wrong-type': [FAIL],
'built-ins/Temporal/Calendar/prototype/weekOfYear/argument-wrong-type': [FAIL],
'built-ins/Temporal/Duration/prototype/round/relativeto-wrong-type': [SKIP],
'built-ins/Temporal/PlainDate/prototype/toPlainDateTime/limits': [FAIL],
'built-ins/Temporal/PlainDateTime/from/limits': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/add/limits': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/round/limits': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/subtract/limits': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/invalid-instant': [FAIL],
'built-ins/Temporal/PlainTime/prototype/toPlainDateTime/limits': [FAIL],
'built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/limits': [FAIL],
'built-ins/Temporal/ZonedDateTime/timezone-string-multiple-offsets': [FAIL],
'built-ins/Temporal/Calendar/prototype/dateFromFields/missing-properties': [FAIL],
'built-ins/Temporal/Calendar/prototype/monthDayFromFields/missing-properties': [FAIL],
@ -651,16 +635,6 @@
'intl402/Temporal/Calendar/prototype/monthDayFromFields/order-of-operations': [FAIL],
'intl402/Temporal/Calendar/prototype/yearMonthFromFields/order-of-operations': [FAIL],
'intl402/Temporal/Duration/compare/relativeto-hour': [FAIL],
'built-ins/Temporal/Instant/compare/instant-string-limits': [FAIL],
'built-ins/Temporal/Instant/from/instant-string-limits': [FAIL],
'built-ins/Temporal/Instant/prototype/equals/instant-string-limits': [FAIL],
'built-ins/Temporal/Instant/prototype/since/instant-string-limits': [FAIL],
'built-ins/Temporal/Instant/prototype/until/instant-string-limits': [FAIL],
'built-ins/Temporal/TimeZone/prototype/getNextTransition/instant-string-limits': [FAIL],
'built-ins/Temporal/TimeZone/prototype/getOffsetNanosecondsFor/instant-string-limits': [FAIL],
'built-ins/Temporal/TimeZone/prototype/getOffsetStringFor/instant-string-limits': [FAIL],
'built-ins/Temporal/TimeZone/prototype/getPlainDateTimeFor/instant-string-limits': [FAIL],
'built-ins/Temporal/TimeZone/prototype/getPreviousTransition/instant-string-limits': [FAIL],
'built-ins/Temporal/Calendar/prototype/dateAdd/argument-calendar-datefromfields-called-with-null-prototype-fields': [FAIL],
'built-ins/Temporal/Calendar/prototype/dateUntil/argument-calendar-datefromfields-called-with-null-prototype-fields': [FAIL],
'built-ins/Temporal/Calendar/prototype/day/argument-calendar-datefromfields-called-with-null-prototype-fields': [FAIL],
@ -756,9 +730,6 @@
'built-ins/Temporal/Duration/prototype/toString/precision-formatted-as-decimal-number': [FAIL],
'built-ins/Temporal/Duration/prototype/total/relativeto-zoneddatetime-with-fractional-days-different-sign': [FAIL],
'built-ins/Temporal/Duration/prototype/total/relativeto-zoneddatetime-with-fractional-days': [FAIL],
'built-ins/Temporal/Instant/compare/argument-string-with-offset-not-valid-epoch-nanoseconds': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/disambiguate-empty-possible-instants-with-datetime-near-limits': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/toZonedDateTime/plain-date-time-near-limits': [FAIL],
'built-ins/Temporal/PlainTime/prototype/add/argument-string-duration-too-large': [FAIL],
'built-ins/Temporal/PlainTime/prototype/subtract/argument-string-duration-too-large': [FAIL],
'built-ins/Temporal/TimeZone/prototype/getPossibleInstantsFor/fixed-offset-near-date-time-limits': [FAIL],
@ -791,10 +762,8 @@
'staging/Temporal/Duration/old/subtract': [FAIL],
'staging/Temporal/Duration/old/toString': [FAIL],
'staging/Temporal/Duration/old/total': [FAIL],
'staging/Temporal/Instant/old/limits': [FAIL],
'staging/Temporal/Regex/old/plaintime': [FAIL],
'staging/Temporal/Regex/old/timezone': [FAIL],
'staging/Temporal/TimeZone/old/getInstantFor': [FAIL],
'staging/Temporal/TimeZone/old/getNextTransition': [FAIL],
'staging/Temporal/TimeZone/old/subminute-offset': [FAIL],
'staging/Temporal/UserCalendar/old/trivial-protocol-implementation': [FAIL],
@ -1052,6 +1021,7 @@
'staging/Temporal/Instant/old/toZonedDateTime': [FAIL],
'staging/Temporal/Instant/old/toZonedDateTimeISO': [FAIL],
'staging/Temporal/TimeZone/old/dst-change': [FAIL],
'staging/Temporal/TimeZone/old/getInstantFor': [FAIL],
'staging/Temporal/TimeZone/old/getInstantFor-disambiguation': [FAIL],
'staging/Temporal/TimeZone/old/getPossibleInstantsFor': [FAIL],
'staging/Temporal/TimeZone/old/getPreviousTransition': [FAIL],