From 092b33c96e99a0cc5047545d6ad8a1a3f276ab49 Mon Sep 17 00:00:00 2001 From: Moustafa Raafat Date: Sun, 16 Oct 2022 14:04:29 +0100 Subject: [PATCH] LibJS: Remove trivial operations ISO{Year,Month,Day} This is an editorial change in the Temporal spec. See: https://github.com/tc39/proposal-temporal/commit/606d8a2 --- .../LibJS/Runtime/Temporal/Calendar.cpp | 60 +------------------ .../LibJS/Runtime/Temporal/Calendar.h | 3 - .../Runtime/Temporal/CalendarPrototype.cpp | 56 ++++++++++++++++- 3 files changed, 56 insertions(+), 63 deletions(-) diff --git a/Userland/Libraries/LibJS/Runtime/Temporal/Calendar.cpp b/Userland/Libraries/LibJS/Runtime/Temporal/Calendar.cpp index 15dc374185..0cd18e80fa 100644 --- a/Userland/Libraries/LibJS/Runtime/Temporal/Calendar.cpp +++ b/Userland/Libraries/LibJS/Runtime/Temporal/Calendar.cpp @@ -923,61 +923,7 @@ ThrowCompletionOr 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(temporal_object)) - return static_cast(temporal_object).iso_year(); - if (is(temporal_object)) - return static_cast(temporal_object).iso_year(); - if (is(temporal_object)) - return static_cast(temporal_object).iso_year(); - if (is(temporal_object)) - return static_cast(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(temporal_object)) - return static_cast(temporal_object).iso_month(); - if (is(temporal_object)) - return static_cast(temporal_object).iso_month(); - if (is(temporal_object)) - return static_cast(temporal_object).iso_month(); - if (is(temporal_object)) - return static_cast(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(temporal_object)) - return static_cast(temporal_object).iso_day(); - if (is(temporal_object)) - return static_cast(temporal_object).iso_day(); - if (is(temporal_object)) - return static_cast(temporal_object).iso_day(); - if (is(temporal_object)) - return static_cast(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 default_merge_calendar_fields(VM& vm, Object const& fields, Object const& additional_fields) { auto& realm = *vm.current_realm(); @@ -1053,7 +999,7 @@ ThrowCompletionOr 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. diff --git a/Userland/Libraries/LibJS/Runtime/Temporal/Calendar.h b/Userland/Libraries/LibJS/Runtime/Temporal/Calendar.h index d006a8b20c..69b4e0084e 100644 --- a/Userland/Libraries/LibJS/Runtime/Temporal/Calendar.h +++ b/Userland/Libraries/LibJS/Runtime/Temporal/Calendar.h @@ -71,9 +71,6 @@ ThrowCompletionOr resolve_iso_month(VM&, Object const& fields); ThrowCompletionOr iso_date_from_fields(VM&, Object const& fields, Object const& options); ThrowCompletionOr iso_year_month_from_fields(VM&, Object const& fields, Object const& options); ThrowCompletionOr 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 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); diff --git a/Userland/Libraries/LibJS/Runtime/Temporal/CalendarPrototype.cpp b/Userland/Libraries/LibJS/Runtime/Temporal/CalendarPrototype.cpp index b90a1d3dce..c7dc2b72a9 100644 --- a/Userland/Libraries/LibJS/Runtime/Temporal/CalendarPrototype.cpp +++ b/Userland/Libraries/LibJS/Runtime/Temporal/CalendarPrototype.cpp @@ -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(temporal_object)) + return static_cast(temporal_object).iso_year(); + if (is(temporal_object)) + return static_cast(temporal_object).iso_year(); + if (is(temporal_object)) + return static_cast(temporal_object).iso_year(); + if (is(temporal_object)) + return static_cast(temporal_object).iso_year(); + VERIFY_NOT_REACHED(); +} + +static u8 iso_month(Object& temporal_object) +{ + if (is(temporal_object)) + return static_cast(temporal_object).iso_month(); + if (is(temporal_object)) + return static_cast(temporal_object).iso_month(); + if (is(temporal_object)) + return static_cast(temporal_object).iso_month(); + if (is(temporal_object)) + return static_cast(temporal_object).iso_month(); + VERIFY_NOT_REACHED(); +} + +static u8 iso_day(Object& temporal_object) +{ + if (is(temporal_object)) + return static_cast(temporal_object).iso_day(); + if (is(temporal_object)) + return static_cast(temporal_object).iso_day(); + if (is(temporal_object)) + return static_cast(temporal_object).iso_day(); + if (is(temporal_object)) + return static_cast(temporal_object).iso_day(); + VERIFY_NOT_REACHED(); +} + }