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

[Temporal] Add PlainDate(Time)?.(compare|prototype.equals)

Also add AO CalendarEquals, CompareISODateTime

Remove Isolate from CompareISODate argument
Spec Text:
https://tc39.es/proposal-temporal/#sec-temporal.plaindate.compare
https://tc39.es/proposal-temporal/#sec-temporal.plaindate.prototype.equals
https://tc39.es/proposal-temporal/#sec-temporal.plaindatetime.compare
https://tc39.es/proposal-temporal/#sec-temporal.plaindatetime.prototype.equals
https://tc39.es/proposal-temporal/#sec-temporal-calendarequals
https://tc39.es/proposal-temporal/#sec-temporal-compareisodatetime

Bug: v8:11544
Change-Id: I5505c7923e3c1f76d44e292135b489ea20fbf13c
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3534458Reviewed-by: 's avatarAdam Klein <adamk@chromium.org>
Commit-Queue: Frank Tang <ftang@chromium.org>
Cr-Commit-Position: refs/heads/main@{#80787}
parent 978506c3
......@@ -38,8 +38,6 @@ namespace internal {
JSTemporal##T::NowISO(isolate, args.atOrUndefined(isolate, 1))); \
}
/* Temporal #sec-temporal.plaindate.compare */
TO_BE_IMPLEMENTED(TemporalPlainDateCompare)
/* Temporal #sec-temporal.plaindate.prototype.add */
TO_BE_IMPLEMENTED(TemporalPlainDatePrototypeAdd)
/* Temporal #sec-temporal.plaindate.prototype.substract */
......@@ -48,8 +46,6 @@ TO_BE_IMPLEMENTED(TemporalPlainDatePrototypeSubtract)
TO_BE_IMPLEMENTED(TemporalPlainDatePrototypeUntil)
/* Temporal #sec-temporal.plaindate.prototype.since */
TO_BE_IMPLEMENTED(TemporalPlainDatePrototypeSince)
/* Temporal #sec-temporal.plaindate.prototype.equals */
TO_BE_IMPLEMENTED(TemporalPlainDatePrototypeEquals)
/* Temporal.PlaneTime */
/* Temporal #sec-temporal.plaintime.prototype.add */
......@@ -68,8 +64,6 @@ TO_BE_IMPLEMENTED(TemporalPlainTimePrototypeToLocaleString)
TO_BE_IMPLEMENTED(TemporalPlainTimePrototypeToString)
/* Temporal.PlaneDateTime */
/* Temporal #sec-temporal.plaindatetime.compare */
TO_BE_IMPLEMENTED(TemporalPlainDateTimeCompare)
/* Temporal #sec-temporal.plaindatetime.prototype.add */
TO_BE_IMPLEMENTED(TemporalPlainDateTimePrototypeAdd)
/* Temporal #sec-temporal.plaindatetime.prototype.subtract */
......@@ -80,8 +74,6 @@ TO_BE_IMPLEMENTED(TemporalPlainDateTimePrototypeUntil)
TO_BE_IMPLEMENTED(TemporalPlainDateTimePrototypeSince)
/* Temporal #sec-temporal.plaindatetime.prototype.round */
TO_BE_IMPLEMENTED(TemporalPlainDateTimePrototypeRound)
/* Temporal #sec-temporal.plaindatetime.prototype.equals */
TO_BE_IMPLEMENTED(TemporalPlainDateTimePrototypeEquals)
/* Temporal #sec-temporal.plaindatetime.prototype.tolocalestring */
TO_BE_IMPLEMENTED(TemporalPlainDateTimePrototypeToLocaleString)
/* Temporal #sec-temporal.plaindatetime.prototype.tostring */
......@@ -368,6 +360,7 @@ BUILTIN(TemporalPlainDateConstructor) {
args.atOrUndefined(isolate, 4))); // calendar_like
}
TEMPORAL_METHOD2(PlainDate, From)
TEMPORAL_METHOD2(PlainDate, Compare)
TEMPORAL_GET(PlainDate, Calendar, calendar)
TEMPORAL_GET_BY_FORWARD_CALENDAR(PlainDate, Year, year)
TEMPORAL_GET_BY_FORWARD_CALENDAR(PlainDate, Month, month)
......@@ -388,6 +381,7 @@ TEMPORAL_PROTOTYPE_METHOD2(PlainDate, With, with)
TEMPORAL_PROTOTYPE_METHOD0(PlainDate, GetISOFields, getISOFields)
TEMPORAL_PROTOTYPE_METHOD1(PlainDate, ToPlainDateTime, toPlainDateTime)
TEMPORAL_PROTOTYPE_METHOD1(PlainDate, ToZonedDateTime, toZonedDateTime)
TEMPORAL_PROTOTYPE_METHOD1(PlainDate, Equals, equals)
TEMPORAL_VALUE_OF(PlainDate)
TEMPORAL_PROTOTYPE_METHOD0(PlainDate, ToJSON, toJSON)
TEMPORAL_PROTOTYPE_METHOD2(PlainDate, ToLocaleString, toLocaleString)
......@@ -463,6 +457,8 @@ TEMPORAL_GET_SMI(PlainDateTime, Millisecond, iso_millisecond)
TEMPORAL_GET_SMI(PlainDateTime, Microsecond, iso_microsecond)
TEMPORAL_GET_SMI(PlainDateTime, Nanosecond, iso_nanosecond)
TEMPORAL_METHOD2(PlainDateTime, From)
TEMPORAL_METHOD2(PlainDateTime, Compare)
TEMPORAL_PROTOTYPE_METHOD1(PlainDateTime, Equals, equals)
TEMPORAL_PROTOTYPE_METHOD0(PlainDateTime, ToPlainYearMonth, toPlainYearMonth)
TEMPORAL_PROTOTYPE_METHOD0(PlainDateTime, ToPlainMonthDay, toPlainMonthDay)
TEMPORAL_PROTOTYPE_METHOD2(PlainDateTime, ToZonedDateTime, toZonedDateTime)
......
......@@ -235,7 +235,7 @@ V8_WARN_UNUSED_RESULT MaybeHandle<BigInt> AddZonedDateTime(
V8_WARN_UNUSED_RESULT MaybeHandle<BigInt> AddZonedDateTime(
Isolate* isolate, Handle<BigInt> eopch_nanoseconds,
Handle<JSReceiver> time_zone, Handle<JSReceiver> calendar,
const DurationRecord& addend, Handle<JSReceiver> options,
const DurationRecord& addend, Handle<Object> options,
const char* method_name);
// #sec-temporal-isvalidepochnanoseconds
......@@ -278,7 +278,7 @@ bool IsValidTime(Isolate* isolate, const TimeRecordCommon& time);
bool IsValidISODate(Isolate* isolate, const DateRecordCommon& date);
// #sec-temporal-compareisodate
int32_t CompareISODate(Isolate* isolate, const DateRecordCommon& date1,
int32_t CompareISODate(const DateRecordCommon& date1,
const DateRecordCommon& date2);
// #sec-temporal-balanceisoyearmonth
......@@ -3720,6 +3720,29 @@ MaybeHandle<String> ParseTemporalCalendarString(Isolate* isolate,
return id;
}
// #sec-temporal-calendarequals
MaybeHandle<Oddball> CalendarEquals(Isolate* isolate, Handle<JSReceiver> one,
Handle<JSReceiver> two) {
// 1. If one and two are the same Object value, return true.
if (one.is_identical_to(two)) {
return isolate->factory()->true_value();
}
// 2. Let calendarOne be ? ToString(one).
Handle<String> calendar_one;
ASSIGN_RETURN_ON_EXCEPTION(isolate, calendar_one,
Object::ToString(isolate, one), Oddball);
// 3. Let calendarTwo be ? ToString(two).
Handle<String> calendar_two;
ASSIGN_RETURN_ON_EXCEPTION(isolate, calendar_two,
Object::ToString(isolate, two), Oddball);
// 4. If calendarOne is calendarTwo, return true.
if (String::Equals(isolate, calendar_one, calendar_two)) {
return isolate->factory()->true_value();
}
// 5. Return false.
return isolate->factory()->false_value();
}
// #sec-temporal-calendarfields
MaybeHandle<FixedArray> CalendarFields(Isolate* isolate,
Handle<JSReceiver> calendar,
......@@ -4356,14 +4379,22 @@ Maybe<TimeRecordCommon> ToTemporalTimeRecord(
// #sec-temporal-mergelargestunitoption
MaybeHandle<JSObject> MergeLargestUnitOption(Isolate* isolate,
Handle<JSReceiver> options,
Handle<Object> options_obj,
Unit largest_unit) {
TEMPORAL_ENTER_FUNC();
// 1. Let merged be ! OrdinaryObjectCreate(%Object.prototype%).
DCHECK(options_obj->IsUndefined() || options_obj->IsJSReceiver());
// 1. If options is undefined, set options to OrdinaryObjectCreate(null).
Handle<Object> options;
if (options_obj->IsUndefined()) {
options = isolate->factory()->NewJSObjectWithNullProto();
} else {
options = Handle<JSReceiver>::cast(options_obj);
}
// 2. Let merged be ! OrdinaryObjectCreate(%Object.prototype%).
Handle<JSObject> merged =
isolate->factory()->NewJSObject(isolate->object_function());
// 2. Let keys be ? EnumerableOwnPropertyNames(options, key).
// 3. For each element nextKey of keys, do
// 3. Let keys be ? EnumerableOwnPropertyNames(options, key).
// 4. For each element nextKey of keys, do
// a. Let propValue be ? Get(options, nextKey).
// b. Perform ! CreateDataPropertyOrThrow(merged, nextKey, propValue).
JSReceiver::SetOrCopyDataProperties(
......@@ -4371,7 +4402,7 @@ MaybeHandle<JSObject> MergeLargestUnitOption(Isolate* isolate,
nullptr, false)
.Check();
// 4. Perform ! CreateDataPropertyOrThrow(merged, "largestUnit", largestUnit).
// 5. Perform ! CreateDataPropertyOrThrow(merged, "largestUnit", largestUnit).
CHECK(JSReceiver::CreateDataProperty(
isolate, merged, isolate->factory()->largestUnit_string(),
UnitToString(isolate, largest_unit), Just(kThrowOnError))
......@@ -4811,7 +4842,7 @@ Maybe<TimeDurationRecord> BalanceDuration(Isolate* isolate, Unit largest_unit,
duration.microseconds * sign, duration.nanoseconds * sign);
}
// #sec-temporal-addinstant
// #sec-temporal-addzoneddatetime
MaybeHandle<BigInt> AddZonedDateTime(Isolate* isolate,
Handle<BigInt> epoch_nanoseconds,
Handle<JSReceiver> time_zone,
......@@ -4820,10 +4851,10 @@ MaybeHandle<BigInt> AddZonedDateTime(Isolate* isolate,
const char* method_name) {
TEMPORAL_ENTER_FUNC();
// 1. If options is not present, set options to ! OrdinaryObjectCreate(null).
Handle<JSReceiver> options = isolate->factory()->NewJSObjectWithNullProto();
// 1. If options is not present, set options to undefined.
return AddZonedDateTime(isolate, epoch_nanoseconds, time_zone, calendar,
duration, options, method_name);
duration, isolate->factory()->undefined_value(),
method_name);
}
// #sec-temporal-addzoneddatetime
......@@ -4832,7 +4863,7 @@ MaybeHandle<BigInt> AddZonedDateTime(Isolate* isolate,
Handle<JSReceiver> time_zone,
Handle<JSReceiver> calendar,
const DurationRecord& duration,
Handle<JSReceiver> options,
Handle<Object> options,
const char* method_name) {
TEMPORAL_ENTER_FUNC();
......@@ -5143,24 +5174,15 @@ Maybe<NanosecondsToDaysResult> NanosecondsToDays(Isolate* isolate,
return Just(result);
}
// #sec-temporal-differenceisodatetime
Maybe<DurationRecord> DifferenceISODateTime(
Isolate* isolate, const DateTimeRecordCommon& date_time1,
const DateTimeRecordCommon& date_time2, Handle<JSReceiver> calendar,
Unit largest_unit, Handle<Object> options_obj, const char* method_name) {
Unit largest_unit, Handle<Object> options, const char* method_name) {
TEMPORAL_ENTER_FUNC();
Factory* factory = isolate->factory();
DurationRecord result;
// 1. Assert: y1, mon1, d1, h1, min1, s1, ms1, mus1, ns1, y2, mon2, d2, h2,
// min2, s2, ms2, mus2, and ns2 are integers.
// 2. If options is not present, set options to ! OrdinaryObjectCreate(null).
Handle<JSReceiver> options;
if (options_obj->IsUndefined()) {
options = factory->NewJSObjectWithNullProto();
} else {
DCHECK(options_obj->IsJSReceiver());
options = Handle<JSReceiver>::cast(options_obj);
}
// 2. Assert: Type(options) is Object or Undefined.
DCHECK(options->IsJSReceiver() || options->IsUndefined());
// 3. Let timeDifference be ! DifferenceTime(h1, min1, s1, ms1, mus1, ns1, h2,
// min2, s2, ms2, mus2, ns2).
TimeDurationRecord time_difference;
......@@ -5178,7 +5200,7 @@ Maybe<DurationRecord> DifferenceISODateTime(
// timeDifference.[[Microseconds]], timeDifference.[[Nanoseconds]]).
double time_sign = DurationSign(isolate, {0, 0, 0, time_difference});
// 5. Let dateSign be ! CompareISODate(y2, mon2, d2, y1, mon1, d1).
double date_sign = CompareISODate(isolate, date_time2.date, date_time1.date);
double date_sign = CompareISODate(date_time2.date, date_time1.date);
// 6. Let balanceResult be ! BalanceISODate(y1, mon1, d1 +
// timeDifference.[[Days]]).
DateRecordCommon balanced = BalanceISODate(
......@@ -5537,27 +5559,45 @@ bool IsValidISODate(Isolate* isolate, const DateRecordCommon& date) {
}
// #sec-temporal-compareisodate
int32_t CompareISODate(Isolate* isolate, const DateRecordCommon& date1,
const DateRecordCommon& date2) {
int32_t CompareISODate(const DateRecordCommon& one,
const DateRecordCommon& two) {
TEMPORAL_ENTER_FUNC();
// 1. Assert: y1, m1, d1, y2, m2, and d2 are integers.
// 2. If y1 > y2, return 1.
if (date1.year > date2.year) return 1;
if (one.year > two.year) return 1;
// 3. If y1 < y2, return -1.
if (date1.year < date2.year) return -1;
if (one.year < two.year) return -1;
// 4. If m1 > m2, return 1.
if (date1.month > date2.month) return 1;
if (one.month > two.month) return 1;
// 5. If m1 < m2, return -1.
if (date1.month < date2.month) return -1;
if (one.month < two.month) return -1;
// 6. If d1 > d2, return 1.
if (date1.day > date2.day) return 1;
if (one.day > two.day) return 1;
// 7. If d1 < d2, return -1.
if (date1.day < date2.day) return -1;
if (one.day < two.day) return -1;
// 8. Return 0.
return 0;
}
int32_t CompareTemporalTime(const TimeRecordCommon& time1,
const TimeRecordCommon& time2);
// #sec-temporal-compareisodatetime
int32_t CompareISODateTime(const DateTimeRecordCommon& one,
const DateTimeRecordCommon& two) {
// 2. Let dateResult be ! CompareISODate(y1, mon1, d1, y2, mon2, d2).
int32_t date_result = CompareISODate(one.date, two.date);
// 3. If dateResult is not 0, then
if (date_result != 0) {
// a. Return dateResult.
return date_result;
}
// 4. Return ! CompareTemporalTime(h1, min1, s1, ms1, mus1, ns1, h2, min2, s2,
// ms2, mus2, ns2).
return CompareTemporalTime(one.time, two.time);
}
inline int32_t floor_divid(int32_t a, int32_t b) {
return (((a) / (b)) + ((((a) < 0) && (((a) % (b)) != 0)) ? -1 : 0));
}
......@@ -6457,7 +6497,7 @@ Maybe<DateDurationRecord> DifferenceISODate(Isolate* isolate,
case Unit::kYear:
case Unit::kMonth: {
// a. Let sign be -(! CompareISODate(y1, m1, d1, y2, m2, d2)).
int32_t sign = -CompareISODate(isolate, date1, date2);
int32_t sign = -CompareISODate(date1, date2);
// b. If sign is 0, return ! CreateDateDurationRecord(0, 0, 0, 0).
if (sign == 0) {
return DateDurationRecord::Create(isolate, 0, 0, 0, 0);
......@@ -6482,7 +6522,7 @@ Maybe<DateDurationRecord> DifferenceISODate(Isolate* isolate,
// g. Let midSign be -(! CompareISODate(mid.[[Year]], mid.[[Month]],
// mid.[[Day]], y2, m2, d2)).
int32_t mid_sign = -CompareISODate(isolate, mid, date2);
int32_t mid_sign = -CompareISODate(mid, date2);
// h. If midSign is 0, then
if (mid_sign == 0) {
......@@ -6512,7 +6552,7 @@ Maybe<DateDurationRecord> DifferenceISODate(Isolate* isolate,
Nothing<DateDurationRecord>());
// l. Let midSign be -(! CompareISODate(mid.[[Year]], mid.[[Month]],
// mid.[[Day]], y2, m2, d2)).
mid_sign = -CompareISODate(isolate, mid, date2);
mid_sign = -CompareISODate(mid, date2);
// m. If midSign is 0, then
if (mid_sign == 0) {
// 1. i. If largestUnit is "year", return !
......@@ -6544,7 +6584,7 @@ Maybe<DateDurationRecord> DifferenceISODate(Isolate* isolate,
Nothing<DateDurationRecord>());
// iv. Let midSign be -(! CompareISODate(mid.[[Year]], mid.[[Month]],
// mid.[[Day]], y2, m2, d2)).
mid_sign = -CompareISODate(isolate, mid, date2);
mid_sign = -CompareISODate(mid, date2);
}
// o. Let days be 0.
double days = 0;
......@@ -6581,7 +6621,7 @@ Maybe<DateDurationRecord> DifferenceISODate(Isolate* isolate,
DateRecordCommon smaller, greater;
// a. If ! CompareISODate(y1, m1, d1, y2, m2, d2) < 0, then
int32_t sign;
if (CompareISODate(isolate, date1, date2) < 0) {
if (CompareISODate(date1, date2) < 0) {
// i. Let smaller be the Record { [[Year]]: y1, [[Month]]: m1, [[Day]]:
// d1
// }.
......@@ -7846,6 +7886,58 @@ MaybeHandle<JSTemporalPlainDate> JSTemporalPlainDate::Constructor(
{iso_year, iso_month, iso_day}, calendar);
}
// #sec-temporal.plaindate.compare
MaybeHandle<Smi> JSTemporalPlainDate::Compare(Isolate* isolate,
Handle<Object> one_obj,
Handle<Object> two_obj) {
const char* method_name = "Temporal.PlainDate.compare";
// 1. Set one to ? ToTemporalDate(one).
Handle<JSTemporalPlainDate> one;
ASSIGN_RETURN_ON_EXCEPTION(
isolate, one, ToTemporalDate(isolate, one_obj, method_name), Smi);
// 2. Set two to ? ToTemporalDate(two).
Handle<JSTemporalPlainDate> two;
ASSIGN_RETURN_ON_EXCEPTION(
isolate, two, ToTemporalDate(isolate, two_obj, method_name), Smi);
// 3. Return 𝔽(! CompareISODate(one.[[ISOYear]], one.[[ISOMonth]],
// one.[[ISODay]], two.[[ISOYear]], two.[[ISOMonth]], two.[[ISODay]])).
return Handle<Smi>(Smi::FromInt(CompareISODate(
{one->iso_year(), one->iso_month(), one->iso_day()},
{two->iso_year(), two->iso_month(), two->iso_day()})),
isolate);
}
// #sec-temporal.plaindate.prototype.equals
MaybeHandle<Oddball> JSTemporalPlainDate::Equals(
Isolate* isolate, Handle<JSTemporalPlainDate> temporal_date,
Handle<Object> other_obj) {
Factory* factory = isolate->factory();
// 1. Let temporalDate be the this value.
// 2. Perform ? RequireInternalSlot(temporalDate,
// [[InitializedTemporalDate]]).
// 3. Set other to ? ToTemporalDate(other).
Handle<JSTemporalPlainDate> other;
ASSIGN_RETURN_ON_EXCEPTION(
isolate, other,
ToTemporalDate(isolate, other_obj, "Temporal.PlainDate.prototype.equals"),
Oddball);
// 4. If temporalDate.[[ISOYear]] ≠ other.[[ISOYear]], return false.
if (temporal_date->iso_year() != other->iso_year()) {
return factory->false_value();
}
// 5. If temporalDate.[[ISOMonth]] ≠ other.[[ISOMonth]], return false.
if (temporal_date->iso_month() != other->iso_month()) {
return factory->false_value();
}
// 6. If temporalDate.[[ISODay]] ≠ other.[[ISODay]], return false.
if (temporal_date->iso_day() != other->iso_day()) {
return factory->false_value();
}
// 7. Return ? CalendarEquals(temporalDate.[[Calendar]], other.[[Calendar]]).
return CalendarEquals(isolate, handle(temporal_date->calendar(), isolate),
handle(other->calendar(), isolate));
}
// #sec-temporal.plaindate.prototype.withcalendar
MaybeHandle<JSTemporalPlainDate> JSTemporalPlainDate::WithCalendar(
Isolate* isolate, Handle<JSTemporalPlainDate> temporal_date,
......@@ -8682,6 +8774,84 @@ MaybeHandle<JSTemporalPlainDateTime> JSTemporalPlainDateTime::From(
return ToTemporalDateTime(isolate, item, options, method_name);
}
// #sec-temporal.plaindatetime.compare
MaybeHandle<Smi> JSTemporalPlainDateTime::Compare(Isolate* isolate,
Handle<Object> one_obj,
Handle<Object> two_obj) {
const char* method_name = "Temporal.PlainDateTime.compare";
// 1. Set one to ? ToTemporalDateTime(one).
Handle<JSTemporalPlainDateTime> one;
ASSIGN_RETURN_ON_EXCEPTION(
isolate, one, ToTemporalDateTime(isolate, one_obj, method_name), Smi);
// 2. Set two to ? ToTemporalDateTime(two).
Handle<JSTemporalPlainDateTime> two;
ASSIGN_RETURN_ON_EXCEPTION(
isolate, two, ToTemporalDateTime(isolate, two_obj, method_name), Smi);
// 3. Return 𝔽(! CompareISODateTime(one.[[ISOYear]], one.[[ISOMonth]],
// one.[[ISODay]], one.[[ISOHour]], one.[[ISOMinute]], one.[[ISOSecond]],
// one.[[ISOMillisecond]], one.[[ISOMicrosecond]], one.[[ISONanosecond]],
// two.[[ISOYear]], two.[[ISOMonth]], two.[[ISODay]], two.[[ISOHour]],
// two.[[ISOMinute]], two.[[ISOSecond]], two.[[ISOMillisecond]],
// two.[[ISOMicrosecond]], two.[[ISONanosecond]])).
return Handle<Smi>(
Smi::FromInt(CompareISODateTime(
{
{one->iso_year(), one->iso_month(), one->iso_day()},
{one->iso_hour(), one->iso_minute(), one->iso_second(),
one->iso_millisecond(), one->iso_microsecond(),
one->iso_nanosecond()},
},
{
{two->iso_year(), two->iso_month(), two->iso_day()},
{two->iso_hour(), two->iso_minute(), two->iso_second(),
two->iso_millisecond(), two->iso_microsecond(),
two->iso_nanosecond()},
})),
isolate);
}
// #sec-temporal.plaindatetime.prototype.equals
MaybeHandle<Oddball> JSTemporalPlainDateTime::Equals(
Isolate* isolate, Handle<JSTemporalPlainDateTime> date_time,
Handle<Object> other_obj) {
// 1. Let dateTime be the this value.
// 2. Perform ? RequireInternalSlot(dateTime,
// [[InitializedTemporalDateTime]]).
// 3. Set other to ? ToTemporalDateTime(other).
Handle<JSTemporalPlainDateTime> other;
ASSIGN_RETURN_ON_EXCEPTION(
isolate, other,
ToTemporalDateTime(isolate, other_obj,
"Temporal.PlainDateTime.prototype.equals"),
Oddball);
// 4. Let result be ! CompareISODateTime(dateTime.[[ISOYear]],
// dateTime.[[ISOMonth]], dateTime.[[ISODay]], dateTime.[[ISOHour]],
// dateTime.[[ISOMinute]], dateTime.[[ISOSecond]],
// dateTime.[[ISOMillisecond]], dateTime.[[ISOMicrosecond]],
// dateTime.[[ISONanosecond]], other.[[ISOYear]], other.[[ISOMonth]],
// other.[[ISODay]], other.[[ISOHour]], other.[[ISOMinute]],
// other.[[ISOSecond]], other.[[ISOMillisecond]], other.[[ISOMicrosecond]],
// other.[[ISONanosecond]]).
int32_t result = CompareISODateTime(
{
{date_time->iso_year(), date_time->iso_month(), date_time->iso_day()},
{date_time->iso_hour(), date_time->iso_minute(),
date_time->iso_second(), date_time->iso_millisecond(),
date_time->iso_microsecond(), date_time->iso_nanosecond()},
},
{
{other->iso_year(), other->iso_month(), other->iso_day()},
{other->iso_hour(), other->iso_minute(), other->iso_second(),
other->iso_millisecond(), other->iso_microsecond(),
other->iso_nanosecond()},
});
// 5. If result is not 0, return false.
if (result != 0) return isolate->factory()->false_value();
// 6. Return ? CalendarEquals(dateTime.[[Calendar]], other.[[Calendar]]).
return CalendarEquals(isolate, handle(date_time->calendar(), isolate),
handle(other->calendar(), isolate));
}
// #sec-temporal.plaindatetime.prototype.with
MaybeHandle<JSTemporalPlainDateTime> JSTemporalPlainDateTime::With(
Isolate* isolate, Handle<JSTemporalPlainDateTime> date_time,
......
......@@ -261,6 +261,16 @@ class JSTemporalPlainDate
Handle<Object> iso_month, Handle<Object> iso_day,
Handle<Object> calendar_like);
// #sec-temporal.plaindate.compare
V8_WARN_UNUSED_RESULT static MaybeHandle<Smi> Compare(Isolate* isolate,
Handle<Object> one,
Handle<Object> two);
// #sec-temporal.plaindate.prototype.equals
V8_WARN_UNUSED_RESULT static MaybeHandle<Oddball> Equals(
Isolate* isolate, Handle<JSTemporalPlainDate> plain_date,
Handle<Object> other);
// #sec-temporal.plaindate.prototype.withcalendar
V8_WARN_UNUSED_RESULT static MaybeHandle<JSTemporalPlainDate> WithCalendar(
Isolate* isolate, Handle<JSTemporalPlainDate> plain_date,
......@@ -356,6 +366,16 @@ class JSTemporalPlainDateTime
V8_WARN_UNUSED_RESULT static MaybeHandle<JSTemporalPlainDateTime> From(
Isolate* isolate, Handle<Object> item, Handle<Object> options);
// #sec-temporal.plaindatetime.compare
V8_WARN_UNUSED_RESULT static MaybeHandle<Smi> Compare(Isolate* isolate,
Handle<Object> one,
Handle<Object> two);
// #sec-temporal.plaindatetime.prototype.equals
V8_WARN_UNUSED_RESULT static MaybeHandle<Oddball> Equals(
Isolate* isolate, Handle<JSTemporalPlainDateTime> plain_date,
Handle<Object> other);
// #sec-temporal.plaindatetime.prototype.toplainyearmonth
V8_WARN_UNUSED_RESULT static MaybeHandle<JSTemporalPlainYearMonth>
ToPlainYearMonth(Isolate* isolate, Handle<JSTemporalPlainDateTime> date_time);
......
......@@ -60,11 +60,7 @@
'temporal/instant-to-json': [FAIL],
'temporal/instant-toJSON': [FAIL],
'temporal/plain-date-add': [FAIL],
'temporal/plain-date-compare': [FAIL],
'temporal/plain-date-equals': [FAIL],
'temporal/plain-date-time-add': [FAIL],
'temporal/plain-date-time-compare': [FAIL],
'temporal/plain-date-time-equals': [FAIL],
'temporal/plain-date-time-subtract': [FAIL],
'temporal/plain-date-time-to-json': [FAIL],
'temporal/plain-date-to-plain-date-time': [FAIL],
......
......@@ -667,22 +667,6 @@
'built-ins/Temporal/Instant/prototype/until/smallestunit-wrong-type': [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/compare/argument-object': [FAIL],
'built-ins/Temporal/PlainDate/compare/argument-plaindatetime': [FAIL],
'built-ins/Temporal/PlainDate/compare/argument-string': [FAIL],
'built-ins/Temporal/Now/zonedDateTime/timezone-string-datetime': [SKIP],
'built-ins/Temporal/PlainDate/compare/argument-string-with-utc-designator': [FAIL],
'built-ins/Temporal/PlainDate/compare/argument-zoneddatetime-timezone-getoffsetnanosecondsfor-non-integer': [FAIL],
'built-ins/Temporal/PlainDate/compare/argument-zoneddatetime-timezone-getoffsetnanosecondsfor-not-callable': [FAIL],
'built-ins/Temporal/PlainDate/compare/argument-zoneddatetime-timezone-getoffsetnanosecondsfor-out-of-range': [FAIL],
'built-ins/Temporal/PlainDate/compare/argument-zoneddatetime-timezone-getoffsetnanosecondsfor-wrong-type': [FAIL],
'built-ins/Temporal/PlainDate/compare/basic': [FAIL],
'built-ins/Temporal/PlainDate/compare/calendar': [FAIL],
'built-ins/Temporal/PlainDate/compare/calendar-datefromfields-called-with-options-undefined': [FAIL],
'built-ins/Temporal/PlainDate/compare/calendar-fields-iterable': [FAIL],
'built-ins/Temporal/PlainDate/compare/calendar-temporal-object': [FAIL],
'built-ins/Temporal/PlainDate/compare/infinity-throws-rangeerror': [FAIL],
'built-ins/Temporal/PlainDate/compare/use-internal-slots': [FAIL],
'built-ins/Temporal/PlainDate/from/limits': [FAIL],
'built-ins/Temporal/PlainDate/limits': [FAIL],
'built-ins/Temporal/PlainDate/prototype/add/argument-not-object': [FAIL],
......@@ -701,25 +685,6 @@
'built-ins/Temporal/PlainDate/prototype/add/overflow-undefined': [FAIL],
'built-ins/Temporal/PlainDate/prototype/add/overflow-wrong-type': [FAIL],
'built-ins/Temporal/PlainDate/prototype/add/subclassing-ignored': [FAIL],
'built-ins/Temporal/PlainDate/prototype/equals/argument-object-invalid': [FAIL],
'built-ins/Temporal/PlainDate/prototype/equals/argument-object-valid': [FAIL],
'built-ins/Temporal/PlainDate/prototype/equals/argument-plaindatetime': [FAIL],
'built-ins/Temporal/PlainDate/prototype/equals/argument-string': [FAIL],
'built-ins/Temporal/PlainDate/prototype/equals/argument-string-with-utc-designator': [FAIL],
'built-ins/Temporal/PlainDate/prototype/equals/argument-wrong-type': [FAIL],
'built-ins/Temporal/PlainDate/prototype/equals/argument-zoneddatetime-timezone-getoffsetnanosecondsfor-non-integer': [FAIL],
'built-ins/Temporal/PlainDate/prototype/equals/argument-zoneddatetime-timezone-getoffsetnanosecondsfor-not-callable': [FAIL],
'built-ins/Temporal/PlainDate/prototype/equals/argument-zoneddatetime-timezone-getoffsetnanosecondsfor-out-of-range': [FAIL],
'built-ins/Temporal/PlainDate/prototype/equals/argument-zoneddatetime-timezone-getoffsetnanosecondsfor-wrong-type': [FAIL],
'built-ins/Temporal/PlainDate/prototype/equals/basic': [FAIL],
'built-ins/Temporal/PlainDate/prototype/equals/branding': [FAIL],
'built-ins/Temporal/PlainDate/prototype/equals/calendar-call-different': [FAIL],
'built-ins/Temporal/PlainDate/prototype/equals/calendar-call-same': [FAIL],
'built-ins/Temporal/PlainDate/prototype/equals/calendar-datefromfields-called-with-options-undefined': [FAIL],
'built-ins/Temporal/PlainDate/prototype/equals/calendar-fields-iterable': [FAIL],
'built-ins/Temporal/PlainDate/prototype/equals/calendar-no-call': [FAIL],
'built-ins/Temporal/PlainDate/prototype/equals/calendar-temporal-object': [FAIL],
'built-ins/Temporal/PlainDate/prototype/equals/infinity-throws-rangeerror': [FAIL],
'built-ins/Temporal/PlainDate/prototype/since/argument-plaindatetime': [FAIL],
'built-ins/Temporal/PlainDate/prototype/since/argument-string-with-utc-designator': [FAIL],
'built-ins/Temporal/PlainDate/prototype/since/argument-zoneddatetime-timezone-getoffsetnanosecondsfor-non-integer': [FAIL],
......@@ -821,18 +786,6 @@
'built-ins/Temporal/PlainDate/prototype/with/overflow-wrong-type': [FAIL],
'built-ins/Temporal/PlainDate/prototype/with/plaindatelike-invalid': [FAIL],
'built-ins/Temporal/PlainDate/prototype/with/subclassing-ignored': [FAIL],
'built-ins/Temporal/PlainDateTime/compare/argument-plaindate': [FAIL],
'built-ins/Temporal/PlainDateTime/compare/argument-string-with-utc-designator': [FAIL],
'built-ins/Temporal/PlainDateTime/compare/argument-zoneddatetime-negative-epochnanoseconds': [FAIL],
'built-ins/Temporal/PlainDateTime/compare/argument-zoneddatetime-timezone-getoffsetnanosecondsfor-non-integer': [FAIL],
'built-ins/Temporal/PlainDateTime/compare/argument-zoneddatetime-timezone-getoffsetnanosecondsfor-not-callable': [FAIL],
'built-ins/Temporal/PlainDateTime/compare/argument-zoneddatetime-timezone-getoffsetnanosecondsfor-out-of-range': [FAIL],
'built-ins/Temporal/PlainDateTime/compare/argument-zoneddatetime-timezone-getoffsetnanosecondsfor-wrong-type': [FAIL],
'built-ins/Temporal/PlainDateTime/compare/calendar-fields-iterable': [FAIL],
'built-ins/Temporal/PlainDateTime/compare/calendar-temporal-object': [FAIL],
'built-ins/Temporal/PlainDateTime/compare/infinity-throws-rangeerror': [FAIL],
'built-ins/Temporal/PlainDateTime/compare/read-time-fields-before-datefromfields': [FAIL],
'built-ins/Temporal/PlainDateTime/compare/use-internal-slots': [FAIL],
'built-ins/Temporal/PlainDateTime/from/argument-zoneddatetime-balance-negative-time-units': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/add/argument-not-object': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/add/argument-string': [FAIL],
......@@ -848,20 +801,7 @@
'built-ins/Temporal/PlainDateTime/prototype/add/overflow-undefined': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/add/overflow-wrong-type': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/add/subclassing-ignored': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/equals/argument-plaindate': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/equals/argument-string-with-utc-designator': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/equals/argument-wrong-type': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/equals/argument-zoneddatetime-balance-negative-time-units': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/equals/argument-zoneddatetime-negative-epochnanoseconds': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/equals/argument-zoneddatetime-timezone-getoffsetnanosecondsfor-non-integer': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/equals/argument-zoneddatetime-timezone-getoffsetnanosecondsfor-not-callable': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/equals/argument-zoneddatetime-timezone-getoffsetnanosecondsfor-out-of-range': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/equals/argument-zoneddatetime-timezone-getoffsetnanosecondsfor-wrong-type': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/equals/branding': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/equals/calendar-fields-iterable': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/equals/calendar-temporal-object': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/equals/infinity-throws-rangeerror': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/equals/read-time-fields-before-datefromfields': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/round/branding': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/round/roundingincrement-nan': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/round/roundingincrement-non-integer': [FAIL],
......@@ -1568,8 +1508,6 @@
'intl402/Temporal/Instant/prototype/toLocaleString/options-conflict': [FAIL],
'intl402/Temporal/Instant/prototype/toLocaleString/options-undefined': [FAIL],
'intl402/Temporal/Now/plainDateTimeISO/timezone-string-datetime': [FAIL],
'intl402/Temporal/PlainDate/compare/infinity-throws-rangeerror': [FAIL],
'intl402/Temporal/PlainDate/prototype/equals/infinity-throws-rangeerror': [FAIL],
'intl402/Temporal/PlainDate/prototype/since/infinity-throws-rangeerror': [FAIL],
'intl402/Temporal/PlainDate/prototype/toLocaleString/locales-undefined': [FAIL],
'intl402/Temporal/PlainDate/prototype/toLocaleString/options-conflict': [FAIL],
......@@ -1577,8 +1515,6 @@
'intl402/Temporal/PlainDate/prototype/toLocaleString/resolved-time-zone': [FAIL],
'intl402/Temporal/PlainDate/prototype/toLocaleString/timezone-getoffsetnanosecondsfor-not-callable': [FAIL],
'intl402/Temporal/PlainDate/prototype/until/infinity-throws-rangeerror': [FAIL],
'intl402/Temporal/PlainDateTime/compare/infinity-throws-rangeerror': [FAIL],
'intl402/Temporal/PlainDateTime/prototype/equals/infinity-throws-rangeerror': [FAIL],
'intl402/Temporal/PlainDateTime/prototype/since/infinity-throws-rangeerror': [FAIL],
'intl402/Temporal/PlainDateTime/prototype/toLocaleString/locales-undefined': [FAIL],
'intl402/Temporal/PlainDateTime/prototype/toLocaleString/options-conflict': [FAIL],
......@@ -1650,7 +1586,6 @@
'built-ins/Temporal/Instant/prototype/subtract/argument-string-fractional-units-rounding-mode': [FAIL],
'built-ins/Temporal/Instant/prototype/until/largestunit-smallestunit-mismatch': [FAIL],
'built-ins/Temporal/Instant/prototype/until/year-zero': [FAIL],
'built-ins/Temporal/PlainDate/compare/year-zero': [FAIL],
'built-ins/Temporal/PlainDate/prototype/add/argument-invalid-duration': [FAIL],
'built-ins/Temporal/PlainDate/prototype/add/argument-missing-properties': [FAIL],
'built-ins/Temporal/PlainDate/prototype/add/argument-singular-units': [FAIL],
......@@ -1658,7 +1593,6 @@
'built-ins/Temporal/PlainDate/prototype/add/basic': [FAIL],
'built-ins/Temporal/PlainDate/prototype/add/overflow-constrain': [FAIL],
'built-ins/Temporal/PlainDate/prototype/add/overflow-reject': [FAIL],
'built-ins/Temporal/PlainDate/prototype/equals/year-zero': [FAIL],
'built-ins/Temporal/PlainDate/prototype/since/days-in-month': [FAIL],
'built-ins/Temporal/PlainDate/prototype/since/days-in-year': [FAIL],
'built-ins/Temporal/PlainDate/prototype/since/largestunit-undefined': [FAIL],
......@@ -1695,9 +1629,7 @@
'built-ins/Temporal/PlainDate/prototype/until/smallestunit-higher-units': [FAIL],
'built-ins/Temporal/PlainDate/prototype/until/year-zero': [FAIL],
'built-ins/Temporal/PlainDate/prototype/with/copy-properties-not-undefined': [FAIL],
'built-ins/Temporal/PlainDateTime/compare/year-zero': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/add/argument-string-fractional-units-rounding-mode': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/equals/year-zero': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/since/largestunit-smallestunit-mismatch': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/since/year-zero': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/subtract/argument-string-fractional-units-rounding-mode': [FAIL],
......@@ -1876,13 +1808,8 @@
'built-ins/Temporal/Instant/prototype/add/disallowed-duration-units': [FAIL],
'built-ins/Temporal/Instant/prototype/subtract/basic': [FAIL],
'built-ins/Temporal/Instant/prototype/subtract/disallowed-duration-units': [FAIL],
'built-ins/Temporal/PlainDate/compare/argument-string-invalid': [FAIL],
'built-ins/Temporal/PlainDate/prototype/equals/argument-string-invalid': [FAIL],
'built-ins/Temporal/PlainDate/prototype/since/argument-string-invalid': [FAIL],
'built-ins/Temporal/PlainDate/prototype/until/argument-string-invalid': [FAIL],
'built-ins/Temporal/PlainDateTime/compare/argument-object-insufficient-data': [FAIL],
'built-ins/Temporal/PlainDateTime/compare/basic': [FAIL],
'built-ins/Temporal/PlainDateTime/compare/cast': [FAIL],
'built-ins/Temporal/PlainDateTime/datetime-math': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/add/ambiguous-date': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/add/argument-duration': [FAIL],
......@@ -1892,9 +1819,6 @@
'built-ins/Temporal/PlainDateTime/prototype/add/negative-duration': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/add/options-empty': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/add/options-invalid': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/equals/argument-object-insufficient-data': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/equals/basic': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/equals/cast': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/subtract/ambiguous-date': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/subtract/argument-duration': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/subtract/argument-object-insufficient-data': [FAIL],
......@@ -1946,9 +1870,7 @@
'built-ins/Temporal/PlainDate/prototype/since/options-wrong-type': [FAIL],
'built-ins/Temporal/PlainDate/prototype/subtract/options-wrong-type': [FAIL],
'built-ins/Temporal/PlainDate/prototype/until/options-wrong-type': [FAIL],
'built-ins/Temporal/PlainDateTime/compare/calendar-ignored': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/add/options-wrong-type': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/equals/calendar-checked': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/round/balance': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/round/options-wrong-type': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/round/rounding-direction': [FAIL],
......@@ -2101,14 +2023,9 @@
'built-ins/Temporal/Now/plainDateTime/calendar-number': [FAIL],
'built-ins/Temporal/Now/zonedDateTime/calendar-number': [FAIL],
'built-ins/Temporal/PlainDate/calendar-number': [FAIL],
'built-ins/Temporal/PlainDate/compare/argument-number': [FAIL],
'built-ins/Temporal/PlainDate/compare/argument-propertybag-calendar-number': [FAIL],
'built-ins/Temporal/PlainDate/compare/argument-propertybag-calendar-wrong-type': [FAIL],
'built-ins/Temporal/PlainDate/compare/argument-wrong-type': [FAIL],
'built-ins/Temporal/PlainDate/from/argument-propertybag-calendar-number': [FAIL],
'built-ins/Temporal/PlainDate/prototype/equals/argument-number': [FAIL],
'built-ins/Temporal/PlainDate/prototype/equals/argument-propertybag-calendar-number': [FAIL],
'built-ins/Temporal/PlainDate/prototype/equals/argument-propertybag-calendar-wrong-type': [FAIL],
'built-ins/Temporal/PlainDate/prototype/since/argument-number': [FAIL],
'built-ins/Temporal/PlainDate/prototype/since/argument-propertybag-calendar-number': [FAIL],
'built-ins/Temporal/PlainDate/prototype/since/argument-propertybag-calendar-wrong-type': [FAIL],
......@@ -2120,16 +2037,11 @@
'built-ins/Temporal/PlainDate/prototype/until/argument-wrong-type': [FAIL],
'built-ins/Temporal/PlainDate/prototype/withCalendar/calendar-number': [FAIL],
'built-ins/Temporal/PlainDateTime/calendar-number': [FAIL],
'built-ins/Temporal/PlainDateTime/compare/argument-number': [FAIL],
'built-ins/Temporal/PlainDateTime/compare/argument-propertybag-calendar-number': [FAIL],
'built-ins/Temporal/PlainDateTime/compare/argument-propertybag-calendar-wrong-type': [FAIL],
'built-ins/Temporal/PlainDateTime/compare/argument-wrong-type': [FAIL],
'built-ins/Temporal/PlainDateTime/from/argument-propertybag-calendar-number': [FAIL],
'built-ins/Temporal/PlainDateTime/from/limits': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/add/limits': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/equals/argument-number': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/equals/argument-propertybag-calendar-number': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/equals/argument-propertybag-calendar-wrong-type': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/round/limits': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/since/argument-number': [FAIL],
'built-ins/Temporal/PlainDateTime/prototype/since/argument-propertybag-calendar-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