From 521638642fa44fa26aa47ae8ad9234129bd4b765 Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Fri, 22 Nov 2024 16:55:18 -0500 Subject: [PATCH] LibJS: Capture CalendarFields by reference in Calendar*FromFields AOs These fields are modified by an invocation to CalendarResolveFields. All callers currently don't care about these modifications, so they move the CalendarFields struct into the AO. But it turns out that at least one AO will care (InterpretTemporalDateTimeFields), thus we will need to take by reference here. --- Libraries/LibJS/Runtime/Temporal/Calendar.cpp | 6 +++--- Libraries/LibJS/Runtime/Temporal/Calendar.h | 6 +++--- Libraries/LibJS/Runtime/Temporal/PlainDate.cpp | 2 +- .../LibJS/Runtime/Temporal/PlainDatePrototype.cpp | 4 ++-- Libraries/LibJS/Runtime/Temporal/PlainMonthDay.cpp | 2 +- Libraries/LibJS/Runtime/Temporal/PlainYearMonth.cpp | 10 +++++----- 6 files changed, 15 insertions(+), 15 deletions(-) diff --git a/Libraries/LibJS/Runtime/Temporal/Calendar.cpp b/Libraries/LibJS/Runtime/Temporal/Calendar.cpp index d8dc0e191cd..fb185cfbecc 100644 --- a/Libraries/LibJS/Runtime/Temporal/Calendar.cpp +++ b/Libraries/LibJS/Runtime/Temporal/Calendar.cpp @@ -495,7 +495,7 @@ ThrowCompletionOr get_temporal_calendar_identifier_with_iso_default(VM& } // 12.2.10 CalendarDateFromFields ( calendar, fields, overflow ), https://tc39.es/proposal-temporal/#sec-temporal-calendardatefromfields -ThrowCompletionOr calendar_date_from_fields(VM& vm, StringView calendar, CalendarFields fields, Overflow overflow) +ThrowCompletionOr calendar_date_from_fields(VM& vm, StringView calendar, CalendarFields& fields, Overflow overflow) { // 1. Perform ? CalendarResolveFields(calendar, fields, DATE). TRY(calendar_resolve_fields(vm, calendar, fields, DateType::Date)); @@ -512,7 +512,7 @@ ThrowCompletionOr calendar_date_from_fields(VM& vm, StringView calendar } // 12.2.11 CalendarYearMonthFromFields ( calendar, fields, overflow ), https://tc39.es/proposal-temporal/#sec-temporal-calendaryearmonthfromfields -ThrowCompletionOr calendar_year_month_from_fields(VM& vm, StringView calendar, CalendarFields fields, Overflow overflow) +ThrowCompletionOr calendar_year_month_from_fields(VM& vm, StringView calendar, CalendarFields& fields, Overflow overflow) { // 1. Perform ? CalendarResolveFields(calendar, fields, YEAR-MONTH). TRY(calendar_resolve_fields(vm, calendar, fields, DateType::YearMonth)); @@ -536,7 +536,7 @@ ThrowCompletionOr calendar_year_month_from_fields(VM& vm, StringView ca } // 12.2.12 CalendarMonthDayFromFields ( calendar, fields, overflow ), https://tc39.es/proposal-temporal/#sec-temporal-calendarmonthdayfromfields -ThrowCompletionOr calendar_month_day_from_fields(VM& vm, StringView calendar, CalendarFields fields, Overflow overflow) +ThrowCompletionOr calendar_month_day_from_fields(VM& vm, StringView calendar, CalendarFields& fields, Overflow overflow) { // 1. Perform ? CalendarResolveFields(calendar, fields, MONTH-DAY). TRY(calendar_resolve_fields(vm, calendar, fields, DateType::MonthDay)); diff --git a/Libraries/LibJS/Runtime/Temporal/Calendar.h b/Libraries/LibJS/Runtime/Temporal/Calendar.h index 0c820b0c643..00359f58a69 100644 --- a/Libraries/LibJS/Runtime/Temporal/Calendar.h +++ b/Libraries/LibJS/Runtime/Temporal/Calendar.h @@ -99,9 +99,9 @@ using CalendarFieldListOrPartial = Variant; ThrowCompletionOr canonicalize_calendar(VM&, StringView id); Vector const& available_calendars(); ThrowCompletionOr prepare_calendar_fields(VM&, StringView calendar, Object const& fields, CalendarFieldList calendar_field_names, CalendarFieldList non_calendar_field_names, CalendarFieldListOrPartial required_field_names); -ThrowCompletionOr calendar_date_from_fields(VM&, StringView calendar, CalendarFields, Overflow); -ThrowCompletionOr calendar_year_month_from_fields(VM&, StringView calendar, CalendarFields, Overflow); -ThrowCompletionOr calendar_month_day_from_fields(VM&, StringView calendar, CalendarFields, Overflow); +ThrowCompletionOr calendar_date_from_fields(VM&, StringView calendar, CalendarFields&, Overflow); +ThrowCompletionOr calendar_year_month_from_fields(VM&, StringView calendar, CalendarFields&, Overflow); +ThrowCompletionOr calendar_month_day_from_fields(VM&, StringView calendar, CalendarFields&, Overflow); String format_calendar_annotation(StringView id, ShowCalendar); bool calendar_equals(StringView one, StringView two); u8 iso_days_in_month(double year, double month); diff --git a/Libraries/LibJS/Runtime/Temporal/PlainDate.cpp b/Libraries/LibJS/Runtime/Temporal/PlainDate.cpp index 80b1181bc91..a81c01b8659 100644 --- a/Libraries/LibJS/Runtime/Temporal/PlainDate.cpp +++ b/Libraries/LibJS/Runtime/Temporal/PlainDate.cpp @@ -106,7 +106,7 @@ ThrowCompletionOr> to_temporal_date(VM& vm, Value item, Value auto overflow = TRY(get_temporal_overflow_option(vm, resolved_options)); // h. Let isoDate be ? CalendarDateFromFields(calendar, fields, overflow). - auto iso_date = TRY(calendar_date_from_fields(vm, calendar, move(fields), overflow)); + auto iso_date = TRY(calendar_date_from_fields(vm, calendar, fields, overflow)); // i. Return ! CreateTemporalDate(isoDate, calendar). return MUST(create_temporal_date(vm, iso_date, move(calendar))); diff --git a/Libraries/LibJS/Runtime/Temporal/PlainDatePrototype.cpp b/Libraries/LibJS/Runtime/Temporal/PlainDatePrototype.cpp index c7ab1fb7a22..0cc023c8f10 100644 --- a/Libraries/LibJS/Runtime/Temporal/PlainDatePrototype.cpp +++ b/Libraries/LibJS/Runtime/Temporal/PlainDatePrototype.cpp @@ -207,7 +207,7 @@ JS_DEFINE_NATIVE_FUNCTION(PlainDatePrototype::to_plain_year_month) auto fields = iso_date_to_fields(calendar, temporal_date->iso_date(), DateType::Date); // 5. Let isoDate be ? CalendarYearMonthFromFields(calendar, fields, CONSTRAIN). - auto iso_date = TRY(calendar_year_month_from_fields(vm, calendar, move(fields), Overflow::Constrain)); + auto iso_date = TRY(calendar_year_month_from_fields(vm, calendar, fields, Overflow::Constrain)); // 6. Return ! CreateTemporalYearMonth(isoDate, calendar). return MUST(create_temporal_year_month(vm, iso_date, calendar)); @@ -227,7 +227,7 @@ JS_DEFINE_NATIVE_FUNCTION(PlainDatePrototype::to_plain_month_day) auto fields = iso_date_to_fields(calendar, temporal_date->iso_date(), DateType::Date); // 5. Let isoDate be ? CalendarMonthDayFromFields(calendar, fields, CONSTRAIN). - auto iso_date = TRY(calendar_month_day_from_fields(vm, calendar, move(fields), Overflow::Constrain)); + auto iso_date = TRY(calendar_month_day_from_fields(vm, calendar, fields, Overflow::Constrain)); // 6. Return ! CreateTemporalMonthDay(isoDate, calendar). return MUST(create_temporal_month_day(vm, iso_date, calendar)); diff --git a/Libraries/LibJS/Runtime/Temporal/PlainMonthDay.cpp b/Libraries/LibJS/Runtime/Temporal/PlainMonthDay.cpp index 1cdf1225633..aab232185c3 100644 --- a/Libraries/LibJS/Runtime/Temporal/PlainMonthDay.cpp +++ b/Libraries/LibJS/Runtime/Temporal/PlainMonthDay.cpp @@ -62,7 +62,7 @@ ThrowCompletionOr> to_temporal_month_day(VM& vm, Value it auto overflow = TRY(get_temporal_overflow_option(vm, resolved_options)); // f. Let isoDate be ? CalendarMonthDayFromFields(calendar, fields, overflow). - auto iso_date = TRY(calendar_month_day_from_fields(vm, calendar, move(fields), overflow)); + auto iso_date = TRY(calendar_month_day_from_fields(vm, calendar, fields, overflow)); // g. Return ! CreateTemporalMonthDay(isoDate, calendar). return MUST(create_temporal_month_day(vm, iso_date, move(calendar))); diff --git a/Libraries/LibJS/Runtime/Temporal/PlainYearMonth.cpp b/Libraries/LibJS/Runtime/Temporal/PlainYearMonth.cpp index 2e425df1418..61fb3b1a4b4 100644 --- a/Libraries/LibJS/Runtime/Temporal/PlainYearMonth.cpp +++ b/Libraries/LibJS/Runtime/Temporal/PlainYearMonth.cpp @@ -64,7 +64,7 @@ ThrowCompletionOr> to_temporal_year_month(VM& vm, Value auto overflow = TRY(get_temporal_overflow_option(vm, resolved_options)); // f. Let isoDate be ? CalendarYearMonthFromFields(calendar, fields, overflow). - auto iso_date = TRY(calendar_year_month_from_fields(vm, calendar, move(fields), overflow)); + auto iso_date = TRY(calendar_year_month_from_fields(vm, calendar, fields, overflow)); // g. Return ! CreateTemporalYearMonth(isoDate, calendar). return MUST(create_temporal_year_month(vm, iso_date, move(calendar))); @@ -224,7 +224,7 @@ ThrowCompletionOr> difference_temporal_plain_year_month(VM& vm this_fields.day = 1; // 9. Let thisDate be ? CalendarDateFromFields(calendar, thisFields, CONSTRAIN). - auto this_date = TRY(calendar_date_from_fields(vm, calendar, move(this_fields), Overflow::Constrain)); + auto this_date = TRY(calendar_date_from_fields(vm, calendar, this_fields, Overflow::Constrain)); // 10. Let otherFields be ISODateToFields(calendar, other.[[ISODate]], YEAR-MONTH). auto other_fields = iso_date_to_fields(calendar, other->iso_date(), DateType::YearMonth); @@ -233,7 +233,7 @@ ThrowCompletionOr> difference_temporal_plain_year_month(VM& vm other_fields.day = 1; // 12. Let otherDate be ? CalendarDateFromFields(calendar, otherFields, CONSTRAIN). - auto other_date = TRY(calendar_date_from_fields(vm, calendar, move(other_fields), Overflow::Constrain)); + auto other_date = TRY(calendar_date_from_fields(vm, calendar, other_fields, Overflow::Constrain)); // 13. Let dateDifference be CalendarDateUntil(calendar, thisDate, otherDate, settings.[[LargestUnit]]). auto date_difference = calendar_date_until(vm, calendar, this_date, other_date, settings.largest_unit); @@ -299,7 +299,7 @@ ThrowCompletionOr> add_duration_to_year_month(VM& vm, Ar fields.day = 1; // 9. Let intermediateDate be ? CalendarDateFromFields(calendar, fields, CONSTRAIN). - auto intermediate_date = TRY(calendar_date_from_fields(vm, calendar, move(fields), Overflow::Constrain)); + auto intermediate_date = TRY(calendar_date_from_fields(vm, calendar, fields, Overflow::Constrain)); ISODate date; @@ -333,7 +333,7 @@ ThrowCompletionOr> add_duration_to_year_month(VM& vm, Ar auto added_date_fields = iso_date_to_fields(calendar, added_date, DateType::YearMonth); // 15. Let isoDate be ? CalendarYearMonthFromFields(calendar, addedDateFields, overflow). - auto iso_date = TRY(calendar_year_month_from_fields(vm, calendar, move(added_date_fields), overflow)); + auto iso_date = TRY(calendar_year_month_from_fields(vm, calendar, added_date_fields, overflow)); // 16. Return ! CreateTemporalYearMonth(isoDate, calendar). return MUST(create_temporal_year_month(vm, iso_date, calendar));