Browse Source

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
Moustafa Raafat 2 years ago
parent
commit
092b33c96e

+ 3 - 57
Userland/Libraries/LibJS/Runtime/Temporal/Calendar.cpp

@@ -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 };
     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)
 ThrowCompletionOr<Object*> default_merge_calendar_fields(VM& vm, Object const& fields, Object const& additional_fields)
 {
 {
     auto& realm = *vm.current_realm();
     auto& realm = *vm.current_realm();
@@ -1053,7 +999,7 @@ ThrowCompletionOr<Object*> default_merge_calendar_fields(VM& vm, Object const& f
     return merged;
     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)
 u16 to_iso_day_of_year(i32 year, u8 month, u8 day)
 {
 {
     // 1. Assert: IsValidISODate(year, month, day) is true.
     // 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;
     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)
 u8 to_iso_day_of_week(i32 year, u8 month, u8 day)
 {
 {
     // 1. Assert: IsValidISODate(year, month, day) is true.
     // 1. Assert: IsValidISODate(year, month, day) is true.

+ 0 - 3
Userland/Libraries/LibJS/Runtime/Temporal/Calendar.h

@@ -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<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<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);
 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);
 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);
 u16 to_iso_day_of_year(i32 year, u8 month, u8 day);
 u8 to_iso_day_of_week(i32 year, u8 month, u8 day);
 u8 to_iso_day_of_week(i32 year, u8 month, u8 day);

+ 53 - 3
Userland/Libraries/LibJS/Runtime/Temporal/CalendarPrototype.cpp

@@ -19,6 +19,10 @@
 
 
 namespace JS::Temporal {
 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
 // 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)
 CalendarPrototype::CalendarPrototype(Realm& realm)
     : PrototypeObject(*realm.intrinsics().object_prototype())
     : 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));
         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()));
     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).
         // a. Set temporalDateLike to ? ToTemporalDate(temporalDateLike).
         temporal_date_like = TRY(to_temporal_date(vm, temporal_date_like));
         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()));
     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).
         // a. Set temporalDateLike to ? ToTemporalDate(temporalDateLike).
         temporal_date_like = TRY(to_temporal_date(vm, temporal_date_like));
         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()));
     return Value(iso_day(temporal_date_like.as_object()));
 }
 }
 
 
@@ -648,4 +659,43 @@ JS_DEFINE_NATIVE_FUNCTION(CalendarPrototype::era_year)
     VERIFY_NOT_REACHED();
     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();
+}
+
 }
 }