tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit 832ab64ac0fef1e9ed5bb0759bf4419d4948adaf
parent c285f533dca03ad24aee56b4d42e9a1a4a21d5df
Author: André Bargull <andre.bargull@gmail.com>
Date:   Thu, 27 Nov 2025 10:03:35 +0000

Bug 1955545 - Part 1: Remove support for "islamic" and "islamic-rgsa" calendars in Temporal. r=spidermonkey-reviewers,dminor

Implements `Temporal` related changes from:
<https://github.com/tc39/proposal-intl-era-monthcode/pull/46>

Differential Revision: https://phabricator.services.mozilla.com/D272027

Diffstat:
Mjs/src/builtin/temporal/Calendar.cpp | 31+------------------------------
Mjs/src/builtin/temporal/Calendar.h | 12------------
Mjs/src/builtin/temporal/Era.h | 6------
Mjs/src/builtin/temporal/MonthCode.h | 13+------------
Mjs/src/tests/jstests.list | 9++++-----
Mjs/src/tests/non262/Temporal/Intl/consistent-dates.js | 9---------
Mjs/src/tests/non262/Temporal/Intl/defaults.js | 5+++++
7 files changed, 11 insertions(+), 74 deletions(-)

diff --git a/js/src/builtin/temporal/Calendar.cpp b/js/src/builtin/temporal/Calendar.cpp @@ -341,12 +341,8 @@ std::string_view js::temporal::CalendarIdentifier(CalendarId calendarId) { return "hebrew"; case CalendarId::Indian: return "indian"; - case CalendarId::Islamic: - return "islamic"; case CalendarId::IslamicCivil: return "islamic-civil"; - case CalendarId::IslamicRGSA: - return "islamic-rgsa"; case CalendarId::IslamicTabular: return "islamic-tbla"; case CalendarId::IslamicUmmAlQura: @@ -537,12 +533,7 @@ static inline bool DayOfMonthCanBeZero(CalendarId calendarId) { // Workaround when day-of-month returns zero. // // See <https://github.com/unicode-org/icu4x/issues/5069>. - static constexpr mozilla::EnumSet<CalendarId> calendars{ - CalendarId::Islamic, - CalendarId::IslamicRGSA, - CalendarId::IslamicUmmAlQura, - }; - return calendars.contains(calendarId); + return calendarId == CalendarId::IslamicUmmAlQura; } static inline int32_t OrdinalMonth(CalendarId calendarId, @@ -626,9 +617,6 @@ static auto ToAnyCalendarKind(CalendarId id) { return icu4x::capi::CalendarKind_Indian; case CalendarId::IslamicCivil: return icu4x::capi::CalendarKind_HijriTabularTypeIIFriday; - case CalendarId::Islamic: - case CalendarId::IslamicRGSA: - return icu4x::capi::CalendarKind_HijriSimulatedMecca; case CalendarId::IslamicTabular: return icu4x::capi::CalendarKind_HijriTabularTypeIIThursday; case CalendarId::IslamicUmmAlQura: @@ -687,8 +675,6 @@ static uint32_t MaximumISOYear(CalendarId calendarId) { return 10'000; } - case CalendarId::Islamic: - case CalendarId::IslamicRGSA: case CalendarId::IslamicUmmAlQura: { // Lower limit for these calendars to avoid running into ICU4X assertions. // @@ -727,8 +713,6 @@ static uint32_t MaximumCalendarYear(CalendarId calendarId) { return 10'000; } - case CalendarId::Islamic: - case CalendarId::IslamicRGSA: case CalendarId::IslamicUmmAlQura: { // Lower limit for these calendars to avoid running into ICU4X assertions. // @@ -888,12 +872,9 @@ static constexpr std::string_view IcuEraName(CalendarId calendar, EraCode era) { return "shaka"; } - // https://docs.rs/icu/latest/icu/calendar/cal/struct.HijriSimulated.html#era-codes // https://docs.rs/icu/latest/icu/calendar/cal/struct.HijriTabular.html#era-codes // https://docs.rs/icu/latest/icu/calendar/cal/struct.HijriUmmAlQura.html#era-codes - case CalendarId::Islamic: case CalendarId::IslamicCivil: - case CalendarId::IslamicRGSA: case CalendarId::IslamicTabular: case CalendarId::IslamicUmmAlQura: { MOZ_ASSERT(era == EraCode::Standard || era == EraCode::Inverse); @@ -1252,9 +1233,7 @@ static UniqueICU4XDate CreateDateFrom(JSContext* cx, CalendarId calendarId, case CalendarId::EthiopianAmeteAlem: case CalendarId::Gregorian: case CalendarId::Indian: - case CalendarId::Islamic: case CalendarId::IslamicCivil: - case CalendarId::IslamicRGSA: case CalendarId::IslamicTabular: case CalendarId::IslamicUmmAlQura: case CalendarId::Japanese: @@ -1520,9 +1499,7 @@ static bool CalendarDateYear(JSContext* cx, CalendarId calendar, case CalendarId::Indian: case CalendarId::Persian: case CalendarId::Gregorian: - case CalendarId::Islamic: case CalendarId::IslamicCivil: - case CalendarId::IslamicRGSA: case CalendarId::IslamicTabular: case CalendarId::IslamicUmmAlQura: case CalendarId::Japanese: { @@ -3116,9 +3093,7 @@ bool js::temporal::CalendarInLeapYear(JSContext* cx, break; } - case CalendarId::Islamic: case CalendarId::IslamicCivil: - case CalendarId::IslamicRGSA: case CalendarId::IslamicTabular: case CalendarId::IslamicUmmAlQura: { MOZ_ASSERT(!CalendarHasLeapMonths(calendarId)); @@ -3764,9 +3739,7 @@ static bool NonISODateAdd(JSContext* cx, CalendarId calendarId, case CalendarId::EthiopianAmeteAlem: case CalendarId::Hebrew: case CalendarId::Indian: - case CalendarId::Islamic: case CalendarId::IslamicCivil: - case CalendarId::IslamicRGSA: case CalendarId::IslamicTabular: case CalendarId::IslamicUmmAlQura: case CalendarId::Persian: @@ -4160,9 +4133,7 @@ static bool NonISODateUntil(JSContext* cx, CalendarId calendarId, case CalendarId::EthiopianAmeteAlem: case CalendarId::Hebrew: case CalendarId::Indian: - case CalendarId::Islamic: case CalendarId::IslamicCivil: - case CalendarId::IslamicRGSA: case CalendarId::IslamicTabular: case CalendarId::IslamicUmmAlQura: case CalendarId::Persian: diff --git a/js/src/builtin/temporal/Calendar.h b/js/src/builtin/temporal/Calendar.h @@ -57,9 +57,7 @@ enum class CalendarId : int32_t { Indian, // Islamic lunar calendars. - Islamic, IslamicCivil, - IslamicRGSA, IslamicTabular, IslamicUmmAlQura, @@ -84,17 +82,7 @@ inline constexpr auto availableCalendars = { CalendarId::Gregorian, CalendarId::Hebrew, CalendarId::Indian, -// See Bug 1950425, this calendar is only available on Nightly due to -// inconsistencies between ICU4X and ICU4C. -#ifdef NIGHTLY_BUILD - CalendarId::Islamic, -#endif CalendarId::IslamicCivil, -// See Bug 1950425, this calendar is only available on Nightly due to -// inconsistencies between ICU4X and ICU4C. -#ifdef NIGHTLY_BUILD - CalendarId::IslamicRGSA, -#endif CalendarId::IslamicTabular, // See Bug 1950425, this calendar is only available on Nightly due to // inconsistencies between ICU4X and ICU4C. diff --git a/js/src/builtin/temporal/Era.h b/js/src/builtin/temporal/Era.h @@ -127,9 +127,7 @@ constexpr auto& CalendarEras(CalendarId id) { return eras::Standard; case CalendarId::Gregorian: - case CalendarId::Islamic: case CalendarId::IslamicCivil: - case CalendarId::IslamicRGSA: case CalendarId::IslamicTabular: case CalendarId::IslamicUmmAlQura: case CalendarId::ROC: @@ -165,9 +163,7 @@ constexpr auto& CalendarEraNames(CalendarId calendar, EraCode era) { : eras::names::GregorianInverse; } - case CalendarId::Islamic: case CalendarId::IslamicCivil: - case CalendarId::IslamicRGSA: case CalendarId::IslamicTabular: case CalendarId::IslamicUmmAlQura: { MOZ_ASSERT(era == EraCode::Standard || era == EraCode::Inverse); @@ -228,9 +224,7 @@ constexpr bool CalendarEraStartsAtYearBoundary(CalendarId id) { // Calendar system which use multiple eras, but each era starts at a year // boundary. case CalendarId::Gregorian: - case CalendarId::Islamic: case CalendarId::IslamicCivil: - case CalendarId::IslamicRGSA: case CalendarId::IslamicTabular: case CalendarId::IslamicUmmAlQura: case CalendarId::ROC: diff --git a/js/src/builtin/temporal/MonthCode.h b/js/src/builtin/temporal/MonthCode.h @@ -178,7 +178,6 @@ class MonthCodes final { // // https://docs.rs/icu/latest/icu/calendar/cal/struct.Buddhist.html#month-codes // https://docs.rs/icu/latest/icu/calendar/cal/struct.Indian.html#month-codes -// https://docs.rs/icu/latest/icu/calendar/cal/struct.HijriSimulated.html#month-codes // https://docs.rs/icu/latest/icu/calendar/cal/struct.HijriTabular.html#month-codes // https://docs.rs/icu/latest/icu/calendar/cal/struct.HijriUmmAlQura.html#month-codes // https://docs.rs/icu/latest/icu/calendar/cal/struct.Japanese.html#month-codes @@ -228,9 +227,7 @@ constexpr auto& CalendarMonthCodes(CalendarId id) { case CalendarId::Buddhist: case CalendarId::Gregorian: case CalendarId::Indian: - case CalendarId::Islamic: case CalendarId::IslamicCivil: - case CalendarId::IslamicRGSA: case CalendarId::IslamicTabular: case CalendarId::IslamicUmmAlQura: case CalendarId::Persian: @@ -262,9 +259,7 @@ constexpr bool CalendarHasLeapMonths(CalendarId id) { case CalendarId::EthiopianAmeteAlem: case CalendarId::Gregorian: case CalendarId::Indian: - case CalendarId::Islamic: case CalendarId::IslamicCivil: - case CalendarId::IslamicRGSA: case CalendarId::IslamicTabular: case CalendarId::IslamicUmmAlQura: case CalendarId::Japanese: @@ -289,9 +284,7 @@ constexpr bool CalendarHasEpagomenalMonths(CalendarId id) { case CalendarId::Gregorian: case CalendarId::Hebrew: case CalendarId::Indian: - case CalendarId::Islamic: case CalendarId::IslamicCivil: - case CalendarId::IslamicRGSA: case CalendarId::IslamicTabular: case CalendarId::IslamicUmmAlQura: case CalendarId::Japanese: @@ -344,9 +337,7 @@ constexpr std::pair<int32_t, int32_t> CalendarDaysInMonth(CalendarId id) { case CalendarId::Chinese: case CalendarId::Dangi: case CalendarId::Hebrew: - case CalendarId::Islamic: case CalendarId::IslamicCivil: - case CalendarId::IslamicRGSA: case CalendarId::IslamicTabular: case CalendarId::IslamicUmmAlQura: return {29, 30}; @@ -449,9 +440,7 @@ constexpr std::pair<int32_t, int32_t> CalendarDaysInMonth(CalendarId id, return {30, 30}; } - // Islamic calendars have 29-30 days per month. - case CalendarId::Islamic: - case CalendarId::IslamicRGSA: + // IslamicUmmAlQura calendar has 29-30 days per month. case CalendarId::IslamicUmmAlQura: return {29, 30}; diff --git a/js/src/tests/jstests.list b/js/src/tests/jstests.list @@ -864,6 +864,10 @@ skip script test262/built-ins/RegExp/property-escapes/generated/Script_-_Arabic. # https://github.com/tc39/test262/pull/4659 skip script test262/staging/Intl402/Temporal/old/indian-calendar.js +# "Intl era and monthCode" proposal should clarify if "islamic" and "islamic-rgsa" are still allowed +# for Intl.DisplayNames. +skip script test262/intl402/Intl/supportedValuesOf/calendars-accepted-by-DisplayNames.js + ############################################## # Enable Iterator Helpers tests in the shell # @@ -1055,16 +1059,11 @@ skip script test262/built-ins/Temporal/ZonedDateTime/prototype/until/argument-st # See Bug 1950425, skip tests for calendars disabled in release or beta skip-if(release_or_beta) script non262/Temporal/Intl/defaults.js skip-if(release_or_beta) script test262/staging/Intl402/Temporal/old/non-iso-calendars-islamic-umalqura.js -skip-if(release_or_beta) script test262/staging/Intl402/Temporal/old/islamic-calendars-islamic.js -skip-if(release_or_beta) script test262/staging/Intl402/Temporal/old/islamic-calendars-islamic-rgsa.js skip-if(release_or_beta) script test262/staging/Intl402/Temporal/old/islamic-calendars-islamic-umalqura.js skip-if(release_or_beta) script test262/intl402/Temporal/PlainMonthDay/from/constrain-to-leap-day.js # Try re-enabling when Bug 1954138 or Bug 1955545 are fixed. -skip script test262/staging/Intl402/Temporal/old/non-iso-calendars-islamic.js -skip script test262/staging/Intl402/Temporal/old/non-iso-calendars-islamic-rgsa.js skip script test262/intl402/DateTimeFormat/constructor-options-calendar-islamic-fallback.js -skip script test262/staging/Intl402/Temporal/old/islamic-calendars-islamic-rgsa.js # https://github.com/tc39/proposal-intl-era-monthcode/issues/23. ICU4X 2.0 doesn't have inverse type skip script test262/staging/Intl402/Temporal/old/non-iso-calendars-coptic.js diff --git a/js/src/tests/non262/Temporal/Intl/consistent-dates.js b/js/src/tests/non262/Temporal/Intl/consistent-dates.js @@ -228,15 +228,6 @@ const tests = { end: {iso: "2293-11-30", year: 6054, monthCode: "M02", day: 30}, }, ], - "islamic": [ - // TODO: Not yet supported. - - // Date ranges in 2000..2030 where ICU4C and ICU4X compute different results. - // { - // start: {iso: "2000-01-01", year: 1420, monthCode: "M09", day: 23}, - // end: {iso: "2029-12-31", year: 1451, monthCode: "M08", day: 25}, - // }, - ], "islamic-umalqura": [ // TODO: Not yet supported. diff --git a/js/src/tests/non262/Temporal/Intl/defaults.js b/js/src/tests/non262/Temporal/Intl/defaults.js @@ -25,6 +25,11 @@ let plainTime = zonedDateTime.toPlainTime(); for (let locale of locales) { for (let calendar of Intl.supportedValuesOf("calendar")) { + // Invalid calendar identifiers for Temporal. + if (calendar === "islamic" || calendar === "islamic-rgsa") { + continue; + } + // Calendar must match for YearMonth and MonthDay. // // https://github.com/js-temporal/proposal-temporal-v2/issues/29