mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 17:37:37 +00:00
LibJS: Remove trivial operations ISO{Year,Month,Day}
This is an editorial change in the Temporal spec.
See: 606d8a2
This commit is contained in:
parent
69d5368b2a
commit
092b33c96e
3 changed files with 56 additions and 63 deletions
|
@ -923,61 +923,7 @@ ThrowCompletionOr<ISOMonthDay> iso_month_day_from_fields(VM& vm, Object const& f
|
|||
return ISOMonthDay { .month = result->month, .day = result->day, .reference_iso_year = reference_iso_year };
|
||||
}
|
||||
|
||||
// 12.2.37 ISOYear ( temporalObject ), https://tc39.es/proposal-temporal/#sec-temporal-isoyear
|
||||
i32 iso_year(Object& temporal_object)
|
||||
{
|
||||
// 1. Assert: temporalObject has an [[ISOYear]] internal slot.
|
||||
// NOTE: Asserted by the VERIFY_NOT_REACHED at the end
|
||||
|
||||
// 2. Return 𝔽(temporalObject.[[ISOYear]]).
|
||||
if (is<PlainDate>(temporal_object))
|
||||
return static_cast<PlainDate&>(temporal_object).iso_year();
|
||||
if (is<PlainDateTime>(temporal_object))
|
||||
return static_cast<PlainDateTime&>(temporal_object).iso_year();
|
||||
if (is<PlainYearMonth>(temporal_object))
|
||||
return static_cast<PlainYearMonth&>(temporal_object).iso_year();
|
||||
if (is<PlainMonthDay>(temporal_object))
|
||||
return static_cast<PlainMonthDay&>(temporal_object).iso_year();
|
||||
VERIFY_NOT_REACHED();
|
||||
}
|
||||
|
||||
// 12.2.38 ISOMonth ( temporalObject ), https://tc39.es/proposal-temporal/#sec-temporal-isomonth
|
||||
u8 iso_month(Object& temporal_object)
|
||||
{
|
||||
// 1. Assert: temporalObject has an [[ISOMonth]] internal slot.
|
||||
// NOTE: Asserted by the VERIFY_NOT_REACHED at the end
|
||||
|
||||
// 2. Return 𝔽(temporalObject.[[ISOMonth]]).
|
||||
if (is<PlainDate>(temporal_object))
|
||||
return static_cast<PlainDate&>(temporal_object).iso_month();
|
||||
if (is<PlainDateTime>(temporal_object))
|
||||
return static_cast<PlainDateTime&>(temporal_object).iso_month();
|
||||
if (is<PlainYearMonth>(temporal_object))
|
||||
return static_cast<PlainYearMonth&>(temporal_object).iso_month();
|
||||
if (is<PlainMonthDay>(temporal_object))
|
||||
return static_cast<PlainMonthDay&>(temporal_object).iso_month();
|
||||
VERIFY_NOT_REACHED();
|
||||
}
|
||||
|
||||
// 12.2.39 ISODay ( temporalObject ), https://tc39.es/proposal-temporal/#sec-temporal-isomonthcode
|
||||
u8 iso_day(Object& temporal_object)
|
||||
{
|
||||
// 1. Assert: temporalObject has an [[ISODay]] internal slot.
|
||||
// NOTE: Asserted by the VERIFY_NOT_REACHED at the end
|
||||
|
||||
// 2. Return 𝔽(temporalObject.[[ISODay]]).
|
||||
if (is<PlainDate>(temporal_object))
|
||||
return static_cast<PlainDate&>(temporal_object).iso_day();
|
||||
if (is<PlainDateTime>(temporal_object))
|
||||
return static_cast<PlainDateTime&>(temporal_object).iso_day();
|
||||
if (is<PlainYearMonth>(temporal_object))
|
||||
return static_cast<PlainYearMonth&>(temporal_object).iso_day();
|
||||
if (is<PlainMonthDay>(temporal_object))
|
||||
return static_cast<PlainMonthDay&>(temporal_object).iso_day();
|
||||
VERIFY_NOT_REACHED();
|
||||
}
|
||||
|
||||
// 12.2.40 DefaultMergeCalendarFields ( fields, additionalFields ), https://tc39.es/proposal-temporal/#sec-temporal-defaultmergecalendarfields
|
||||
// 12.2.37 DefaultMergeCalendarFields ( fields, additionalFields ), https://tc39.es/proposal-temporal/#sec-temporal-defaultmergecalendarfields
|
||||
ThrowCompletionOr<Object*> default_merge_calendar_fields(VM& vm, Object const& fields, Object const& additional_fields)
|
||||
{
|
||||
auto& realm = *vm.current_realm();
|
||||
|
@ -1053,7 +999,7 @@ ThrowCompletionOr<Object*> default_merge_calendar_fields(VM& vm, Object const& f
|
|||
return merged;
|
||||
}
|
||||
|
||||
// 12.2.41 ToISODayOfYear ( year, month, day ), https://tc39.es/proposal-temporal/#sec-temporal-toisodayofyear
|
||||
// 12.2.38 ToISODayOfYear ( year, month, day ), https://tc39.es/proposal-temporal/#sec-temporal-toisodayofyear
|
||||
u16 to_iso_day_of_year(i32 year, u8 month, u8 day)
|
||||
{
|
||||
// 1. Assert: IsValidISODate(year, month, day) is true.
|
||||
|
@ -1069,7 +1015,7 @@ u16 to_iso_day_of_year(i32 year, u8 month, u8 day)
|
|||
return day_within_year(make_date(epoch_days, 0)) + 1;
|
||||
}
|
||||
|
||||
// 12.2.42 ToISODayOfWeek ( year, month, day ), https://tc39.es/proposal-temporal/#sec-temporal-toisodayofweek
|
||||
// 12.2.39 ToISODayOfWeek ( year, month, day ), https://tc39.es/proposal-temporal/#sec-temporal-toisodayofweek
|
||||
u8 to_iso_day_of_week(i32 year, u8 month, u8 day)
|
||||
{
|
||||
// 1. Assert: IsValidISODate(year, month, day) is true.
|
||||
|
|
|
@ -71,9 +71,6 @@ ThrowCompletionOr<double> resolve_iso_month(VM&, Object const& fields);
|
|||
ThrowCompletionOr<ISODateRecord> iso_date_from_fields(VM&, Object const& fields, Object const& options);
|
||||
ThrowCompletionOr<ISOYearMonth> iso_year_month_from_fields(VM&, Object const& fields, Object const& options);
|
||||
ThrowCompletionOr<ISOMonthDay> iso_month_day_from_fields(VM&, Object const& fields, Object const& options);
|
||||
i32 iso_year(Object& temporal_object);
|
||||
u8 iso_month(Object& temporal_object);
|
||||
u8 iso_day(Object& temporal_object);
|
||||
ThrowCompletionOr<Object*> default_merge_calendar_fields(VM&, Object const& fields, Object const& additional_fields);
|
||||
u16 to_iso_day_of_year(i32 year, u8 month, u8 day);
|
||||
u8 to_iso_day_of_week(i32 year, u8 month, u8 day);
|
||||
|
|
|
@ -19,6 +19,10 @@
|
|||
|
||||
namespace JS::Temporal {
|
||||
|
||||
[[nodiscard]] static i32 iso_year(Object& temporal_object);
|
||||
[[nodiscard]] static u8 iso_month(Object& temporal_object);
|
||||
[[nodiscard]] static u8 iso_day(Object& temporal_object);
|
||||
|
||||
// 12.4 Properties of the Temporal.Calendar Prototype Object, https://tc39.es/proposal-temporal/#sec-properties-of-the-temporal-calendar-prototype-object
|
||||
CalendarPrototype::CalendarPrototype(Realm& realm)
|
||||
: PrototypeObject(*realm.intrinsics().object_prototype())
|
||||
|
@ -236,7 +240,10 @@ JS_DEFINE_NATIVE_FUNCTION(CalendarPrototype::year)
|
|||
temporal_date_like = TRY(to_temporal_date(vm, temporal_date_like));
|
||||
}
|
||||
|
||||
// 5. Return ! ISOYear(temporalDateLike).
|
||||
// 5. Assert: temporalDateLike has an [[ISOYear]] internal slot.
|
||||
// NOTE: The assertion happens in iso_year() call.
|
||||
|
||||
// 6. Return 𝔽(temporalDateLike.[[ISOYear]]).
|
||||
return Value(iso_year(temporal_date_like.as_object()));
|
||||
}
|
||||
|
||||
|
@ -264,8 +271,10 @@ JS_DEFINE_NATIVE_FUNCTION(CalendarPrototype::month)
|
|||
// a. Set temporalDateLike to ? ToTemporalDate(temporalDateLike).
|
||||
temporal_date_like = TRY(to_temporal_date(vm, temporal_date_like));
|
||||
}
|
||||
// 6. Assert: temporalDateLike has an [[ISOMonth]] internal slot.
|
||||
// NOTE: The assertion happens in iso_month() call.
|
||||
|
||||
// 6. Return ! ISOMonth(temporalDateLike).
|
||||
// 7. Return 𝔽(temporalDateLike.[[ISOMonth]]).
|
||||
return Value(iso_month(temporal_date_like.as_object()));
|
||||
}
|
||||
|
||||
|
@ -311,8 +320,10 @@ JS_DEFINE_NATIVE_FUNCTION(CalendarPrototype::day)
|
|||
// a. Set temporalDateLike to ? ToTemporalDate(temporalDateLike).
|
||||
temporal_date_like = TRY(to_temporal_date(vm, temporal_date_like));
|
||||
}
|
||||
// 5. Assert: temporalDateLike has an [[ISODay]] internal slot.
|
||||
// NOTE: The assertion happens in iso_day() call.
|
||||
|
||||
// 5. Return ! ISODay(temporalDateLike).
|
||||
// 6. Return 𝔽(temporalDateLike.[[ISODay]]).
|
||||
return Value(iso_day(temporal_date_like.as_object()));
|
||||
}
|
||||
|
||||
|
@ -648,4 +659,43 @@ JS_DEFINE_NATIVE_FUNCTION(CalendarPrototype::era_year)
|
|||
VERIFY_NOT_REACHED();
|
||||
}
|
||||
|
||||
static i32 iso_year(Object& temporal_object)
|
||||
{
|
||||
if (is<PlainDate>(temporal_object))
|
||||
return static_cast<PlainDate&>(temporal_object).iso_year();
|
||||
if (is<PlainDateTime>(temporal_object))
|
||||
return static_cast<PlainDateTime&>(temporal_object).iso_year();
|
||||
if (is<PlainYearMonth>(temporal_object))
|
||||
return static_cast<PlainYearMonth&>(temporal_object).iso_year();
|
||||
if (is<PlainMonthDay>(temporal_object))
|
||||
return static_cast<PlainMonthDay&>(temporal_object).iso_year();
|
||||
VERIFY_NOT_REACHED();
|
||||
}
|
||||
|
||||
static u8 iso_month(Object& temporal_object)
|
||||
{
|
||||
if (is<PlainDate>(temporal_object))
|
||||
return static_cast<PlainDate&>(temporal_object).iso_month();
|
||||
if (is<PlainDateTime>(temporal_object))
|
||||
return static_cast<PlainDateTime&>(temporal_object).iso_month();
|
||||
if (is<PlainYearMonth>(temporal_object))
|
||||
return static_cast<PlainYearMonth&>(temporal_object).iso_month();
|
||||
if (is<PlainMonthDay>(temporal_object))
|
||||
return static_cast<PlainMonthDay&>(temporal_object).iso_month();
|
||||
VERIFY_NOT_REACHED();
|
||||
}
|
||||
|
||||
static u8 iso_day(Object& temporal_object)
|
||||
{
|
||||
if (is<PlainDate>(temporal_object))
|
||||
return static_cast<PlainDate&>(temporal_object).iso_day();
|
||||
if (is<PlainDateTime>(temporal_object))
|
||||
return static_cast<PlainDateTime&>(temporal_object).iso_day();
|
||||
if (is<PlainYearMonth>(temporal_object))
|
||||
return static_cast<PlainYearMonth&>(temporal_object).iso_day();
|
||||
if (is<PlainMonthDay>(temporal_object))
|
||||
return static_cast<PlainMonthDay&>(temporal_object).iso_day();
|
||||
VERIFY_NOT_REACHED();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue