[Temporal] Add Calendar.prototype.inLeapYear
Spec Text: https://tc39.es/proposal-temporal/#sec-temporal.calendar.prototype.inleapyear Note- this is only the non-intl version. intl version in https://tc39.es/proposal-temporal/#sup-temporal.calendar.prototype.inleapyear will be implemented in later cl. Bug: v8:11544 Change-Id: I0f30d45ed6d742acaeaa2f7ddf5b393ef7fa5437 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3531561 Reviewed-by: Adam Klein <adamk@chromium.org> Commit-Queue: Frank Tang <ftang@chromium.org> Cr-Commit-Position: refs/heads/main@{#79699}
This commit is contained in:
parent
3f3a427f48
commit
05a58f2687
@ -328,8 +328,6 @@ TO_BE_IMPLEMENTED(TemporalCalendarPrototypeWeekOfYear)
|
||||
TO_BE_IMPLEMENTED(TemporalCalendarPrototypeDaysInWeek)
|
||||
/* Temporal #sec-temporal.calendar.prototype.daysinmonth */
|
||||
TO_BE_IMPLEMENTED(TemporalCalendarPrototypeDaysInMonth)
|
||||
/* Temporal #sec-temporal.calendar.prototype.inleapyear */
|
||||
TO_BE_IMPLEMENTED(TemporalCalendarPrototypeInLeapYear)
|
||||
/* Temporal #sec-temporal.calendar.prototype.mergefields */
|
||||
TO_BE_IMPLEMENTED(TemporalCalendarPrototypeMergeFields)
|
||||
/* Temporal #sec-temporal.calendar.prototype.tojson */
|
||||
@ -799,6 +797,7 @@ TEMPORAL_PROTOTYPE_METHOD1(Calendar, DaysInYear, daysInYear)
|
||||
TEMPORAL_PROTOTYPE_METHOD1(Calendar, DayOfWeek, dayOfWeek)
|
||||
TEMPORAL_PROTOTYPE_METHOD1(Calendar, DayOfYear, dayOfYear)
|
||||
TEMPORAL_PROTOTYPE_METHOD1(Calendar, MonthsInYear, monthsInYear)
|
||||
TEMPORAL_PROTOTYPE_METHOD1(Calendar, InLeapYear, inLeapYear)
|
||||
TEMPORAL_TO_STRING(Calendar)
|
||||
// #sec-temporal.calendar.from
|
||||
BUILTIN(TemporalCalendarFrom) {
|
||||
|
@ -4991,6 +4991,42 @@ MaybeHandle<Smi> JSTemporalCalendar::MonthsInYear(
|
||||
return handle(Smi::FromInt(months_in_year), isolate);
|
||||
}
|
||||
|
||||
// #sec-temporal.calendar.prototype.inleapyear
|
||||
MaybeHandle<Oddball> JSTemporalCalendar::InLeapYear(
|
||||
Isolate* isolate, Handle<JSTemporalCalendar> calendar,
|
||||
Handle<Object> temporal_date_like) {
|
||||
// 1. Let calendar be the this value.
|
||||
// 2. Perform ? RequireInternalSlot(calendar,
|
||||
// [[InitializedTemporalCalendar]]).
|
||||
// 3. Assert: calendar.[[Identifier]] is "iso8601".
|
||||
// 4. If Type(temporalDateLike) is not Object or temporalDateLike does not
|
||||
// have an [[InitializedTemporalDate]], [[InitializedTemporalDateTime]], or
|
||||
// [[InitializedTemporalYearMonth]] internal slot, then
|
||||
if (!IsPlainDatePlainDateTimeOrPlainYearMonth(temporal_date_like)) {
|
||||
// a. Set temporalDateLike to ? ToTemporalDate(temporalDateLike).
|
||||
ASSIGN_RETURN_ON_EXCEPTION(
|
||||
isolate, temporal_date_like,
|
||||
ToTemporalDate(isolate, temporal_date_like,
|
||||
isolate->factory()->NewJSObjectWithNullProto(),
|
||||
"Temporal.Calendar.prototype.inLeapYear"),
|
||||
Oddball);
|
||||
}
|
||||
|
||||
// a. Let inLeapYear be ! IsISOLeapYear(temporalDateLike.[[ISOYear]]).
|
||||
int32_t year;
|
||||
if (temporal_date_like->IsJSTemporalPlainDate()) {
|
||||
year = Handle<JSTemporalPlainDate>::cast(temporal_date_like)->iso_year();
|
||||
} else if (temporal_date_like->IsJSTemporalPlainDateTime()) {
|
||||
year =
|
||||
Handle<JSTemporalPlainDateTime>::cast(temporal_date_like)->iso_year();
|
||||
} else {
|
||||
DCHECK(temporal_date_like->IsJSTemporalPlainYearMonth());
|
||||
year =
|
||||
Handle<JSTemporalPlainYearMonth>::cast(temporal_date_like)->iso_year();
|
||||
}
|
||||
return isolate->factory()->ToBoolean(IsISOLeapYear(isolate, year));
|
||||
}
|
||||
|
||||
// #sec-temporal.calendar.prototype.tostring
|
||||
MaybeHandle<String> JSTemporalCalendar::ToString(
|
||||
Isolate* isolate, Handle<JSTemporalCalendar> calendar,
|
||||
|
@ -77,6 +77,11 @@ class JSTemporalCalendar
|
||||
Isolate* isolate, Handle<JSTemporalCalendar> calendar,
|
||||
Handle<Object> temporal_date_like);
|
||||
|
||||
// #sec-temporal.calendar.prototype.inleapyear
|
||||
V8_WARN_UNUSED_RESULT static MaybeHandle<Oddball> InLeapYear(
|
||||
Isolate* isolate, Handle<JSTemporalCalendar> calendar,
|
||||
Handle<Object> temporal_date_like);
|
||||
|
||||
// #sec-temporal.calendar.prototype.tostring
|
||||
static MaybeHandle<String> ToString(Isolate* isolate,
|
||||
Handle<JSTemporalCalendar> calendar,
|
||||
|
@ -51,7 +51,6 @@
|
||||
'temporal/calendar-days-in-month': [FAIL],
|
||||
'temporal/calendar-days-in-week': [FAIL],
|
||||
'temporal/calendar-fields': [FAIL],
|
||||
'temporal/calendar-in-leap-year': [FAIL],
|
||||
'temporal/calendar-merge-fields': [FAIL],
|
||||
'temporal/calendar-month': [FAIL],
|
||||
'temporal/calendar-month-code': [FAIL],
|
||||
|
@ -538,13 +538,7 @@
|
||||
'built-ins/Temporal/Calendar/prototype/fields/non-string-element-throws': [FAIL],
|
||||
'built-ins/Temporal/Calendar/prototype/fields/repeated-throw': [FAIL],
|
||||
'built-ins/Temporal/Calendar/prototype/fields/reverse': [FAIL],
|
||||
'built-ins/Temporal/Calendar/prototype/inLeapYear/argument-string-with-utc-designator': [FAIL],
|
||||
'built-ins/Temporal/Calendar/prototype/inLeapYear/argument-zoneddatetime-timezone-getoffsetnanosecondsfor-non-integer': [FAIL],
|
||||
'built-ins/Temporal/Calendar/prototype/inLeapYear/argument-zoneddatetime-timezone-getoffsetnanosecondsfor-not-callable': [FAIL],
|
||||
'built-ins/Temporal/Calendar/prototype/inLeapYear/argument-zoneddatetime-timezone-getoffsetnanosecondsfor-out-of-range': [FAIL],
|
||||
'built-ins/Temporal/Calendar/prototype/inLeapYear/argument-zoneddatetime-timezone-getoffsetnanosecondsfor-wrong-type': [FAIL],
|
||||
'built-ins/Temporal/Calendar/prototype/inLeapYear/basic': [FAIL],
|
||||
'built-ins/Temporal/Calendar/prototype/inLeapYear/branding': [FAIL],
|
||||
'built-ins/Temporal/Calendar/prototype/inLeapYear/calendar-fields-iterable': [FAIL],
|
||||
'built-ins/Temporal/Calendar/prototype/inLeapYear/calendar-temporal-object': [FAIL],
|
||||
'built-ins/Temporal/Calendar/prototype/inLeapYear/infinity-throws-rangeerror': [FAIL],
|
||||
|
Loading…
Reference in New Issue
Block a user