tor-browser

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

commit 0624561f4306c2efb34f28da4cd41473b7c78459
parent 593174a0f7153fe141176ea64015899eaafb8db4
Author: André Bargull <andre.bargull@gmail.com>
Date:   Thu, 27 Nov 2025 10:03:33 +0000

Bug 1998672 - Part 1: Add TemporalUnit::Unset. r=spidermonkey-reviewers,dminor

Used in the next part.

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

Diffstat:
Mjs/src/builtin/intl/DurationFormat.cpp | 7+++++++
Mjs/src/builtin/intl/DurationFormat.h | 22+++++++++++-----------
Mjs/src/builtin/temporal/Duration.cpp | 6++++--
Mjs/src/builtin/temporal/PlainTime.cpp | 1+
Mjs/src/builtin/temporal/Temporal.h | 6+++---
Mjs/src/builtin/temporal/TemporalUnit.h | 8++++++++
6 files changed, 34 insertions(+), 16 deletions(-)

diff --git a/js/src/builtin/intl/DurationFormat.cpp b/js/src/builtin/intl/DurationFormat.cpp @@ -314,6 +314,7 @@ static auto ToDurationValue(const temporal::Duration& duration, return DurationValue{duration.microseconds}; case TemporalUnit::Nanosecond: return DurationValue{duration.nanoseconds}; + case TemporalUnit::Unset: case TemporalUnit::Auto: break; } @@ -348,6 +349,7 @@ static PropertyName* DurationDisplayName(temporal::TemporalUnit unit, return cx->names().microsecondsDisplay; case TemporalUnit::Nanosecond: return cx->names().nanosecondsDisplay; + case TemporalUnit::Unset: case TemporalUnit::Auto: break; } @@ -403,6 +405,7 @@ static PropertyName* DurationStyleName(temporal::TemporalUnit unit, return cx->names().microsecondsStyle; case TemporalUnit::Nanosecond: return cx->names().nanosecondsStyle; + case TemporalUnit::Unset: case TemporalUnit::Auto: break; } @@ -481,6 +484,7 @@ static DurationUnitOptions GetUnitOptions(const DurationFormatOptions& options, return GET_UNIT_OPTIONS(microseconds); case TemporalUnit::Nanosecond: return GET_UNIT_OPTIONS(nanoseconds); + case TemporalUnit::Unset: case TemporalUnit::Auto: break; @@ -531,6 +535,7 @@ static void SetUnitOptions(DurationFormatOptions& options, case TemporalUnit::Nanosecond: SET_UNIT_OPTIONS(nanoseconds); return; + case TemporalUnit::Unset: case TemporalUnit::Auto: break; @@ -688,6 +693,7 @@ static std::string_view UnitName(temporal::TemporalUnit unit) { return "microsecond"; case TemporalUnit::Nanosecond: return "nanosecond"; + case TemporalUnit::Unset: case TemporalUnit::Auto: break; } @@ -721,6 +727,7 @@ static auto PartUnitName(temporal::TemporalUnit unit) { return &JSAtomState::microsecond; case TemporalUnit::Nanosecond: return &JSAtomState::nanosecond; + case TemporalUnit::Unset: case TemporalUnit::Auto: break; } diff --git a/js/src/builtin/intl/DurationFormat.h b/js/src/builtin/intl/DurationFormat.h @@ -68,17 +68,17 @@ class DurationFormatObject : public NativeObject { static const JSClass& protoClass_; static constexpr uint32_t INTERNALS_SLOT = 0; - static constexpr uint32_t NUMBER_FORMAT_YEARS_SLOT = 1; - static constexpr uint32_t NUMBER_FORMAT_MONTHS_SLOT = 2; - static constexpr uint32_t NUMBER_FORMAT_WEEKS_SLOT = 3; - static constexpr uint32_t NUMBER_FORMAT_DAYS_SLOT = 4; - static constexpr uint32_t NUMBER_FORMAT_HOURS_SLOT = 5; - static constexpr uint32_t NUMBER_FORMAT_MINUTES_SLOT = 6; - static constexpr uint32_t NUMBER_FORMAT_SECONDS_SLOT = 7; - static constexpr uint32_t NUMBER_FORMAT_MILLISECONDS_SLOT = 8; - static constexpr uint32_t NUMBER_FORMAT_MICROSECONDS_SLOT = 9; - static constexpr uint32_t NUMBER_FORMAT_NANOSECONDS_SLOT = 10; - static constexpr uint32_t LIST_FORMAT_SLOT = 11; + static constexpr uint32_t LIST_FORMAT_SLOT = 1; + static constexpr uint32_t NUMBER_FORMAT_YEARS_SLOT = 2; + static constexpr uint32_t NUMBER_FORMAT_MONTHS_SLOT = 3; + static constexpr uint32_t NUMBER_FORMAT_WEEKS_SLOT = 4; + static constexpr uint32_t NUMBER_FORMAT_DAYS_SLOT = 5; + static constexpr uint32_t NUMBER_FORMAT_HOURS_SLOT = 6; + static constexpr uint32_t NUMBER_FORMAT_MINUTES_SLOT = 7; + static constexpr uint32_t NUMBER_FORMAT_SECONDS_SLOT = 8; + static constexpr uint32_t NUMBER_FORMAT_MILLISECONDS_SLOT = 9; + static constexpr uint32_t NUMBER_FORMAT_MICROSECONDS_SLOT = 10; + static constexpr uint32_t NUMBER_FORMAT_NANOSECONDS_SLOT = 11; static constexpr uint32_t OPTIONS_SLOT = 12; static constexpr uint32_t TIME_SEPARATOR_SLOT = 13; static constexpr uint32_t SLOT_COUNT = 14; diff --git a/js/src/builtin/temporal/Duration.cpp b/js/src/builtin/temporal/Duration.cpp @@ -593,6 +593,7 @@ static Duration TemporalDurationFromInternal(const TimeDuration& timeDuration, case TemporalUnit::Millisecond: case TemporalUnit::Microsecond: case TemporalUnit::Nanosecond: + case TemporalUnit::Unset: case TemporalUnit::Auto: MOZ_CRASH("Unexpected temporal unit"); } @@ -770,6 +771,7 @@ bool js::temporal::TemporalDurationFromInternal( return true; } + case TemporalUnit::Unset: case TemporalUnit::Auto: break; } @@ -2587,8 +2589,8 @@ static bool BubbleRelativeDuration( while (unit > largestUnit) { using TemporalUnitType = std::underlying_type_t<TemporalUnit>; - static_assert(static_cast<TemporalUnitType>(TemporalUnit::Auto) == 0, - "TemporalUnit::Auto has value zero"); + static_assert(static_cast<TemporalUnitType>(TemporalUnit::Auto) == 1, + "TemporalUnit::Auto has value one"); MOZ_ASSERT(unit > TemporalUnit::Auto, "can subtract unit by one"); // Steps 4, 6.a, and 6.c. diff --git a/js/src/builtin/temporal/PlainTime.cpp b/js/src/builtin/temporal/PlainTime.cpp @@ -802,6 +802,7 @@ TimeRecord js::temporal::RoundTime(const Time& time, Increment increment, result = &nanosecond; break; + case TemporalUnit::Unset: case TemporalUnit::Auto: case TemporalUnit::Year: case TemporalUnit::Month: diff --git a/js/src/builtin/temporal/Temporal.h b/js/src/builtin/temporal/Temporal.h @@ -258,7 +258,7 @@ bool GetTemporalFractionalSecondDigitsOption(JSContext* cx, struct SecondsStringPrecision final { Precision precision = Precision{0}; - TemporalUnit unit = TemporalUnit::Auto; + TemporalUnit unit = TemporalUnit::Unset; Increment increment = Increment{1}; }; @@ -354,8 +354,8 @@ inline const char* ToName(TemporalAddDuration addDuration) { } struct DifferenceSettings final { - TemporalUnit smallestUnit = TemporalUnit::Auto; - TemporalUnit largestUnit = TemporalUnit::Auto; + TemporalUnit smallestUnit = TemporalUnit::Unset; + TemporalUnit largestUnit = TemporalUnit::Unset; TemporalRoundingMode roundingMode = TemporalRoundingMode::Trunc; Increment roundingIncrement = Increment{1}; }; diff --git a/js/src/builtin/temporal/TemporalUnit.h b/js/src/builtin/temporal/TemporalUnit.h @@ -13,6 +13,7 @@ namespace js::temporal { enum class TemporalUnit { + Unset, Auto, Year, Month, @@ -43,6 +44,7 @@ constexpr int64_t ToNanoseconds(TemporalUnit unit) { case TemporalUnit::Nanosecond: return 1; + case TemporalUnit::Unset: case TemporalUnit::Auto: case TemporalUnit::Year: case TemporalUnit::Month: @@ -67,6 +69,7 @@ constexpr int64_t ToMicroseconds(TemporalUnit unit) { case TemporalUnit::Microsecond: return 1; + case TemporalUnit::Unset: case TemporalUnit::Auto: case TemporalUnit::Year: case TemporalUnit::Month: @@ -90,6 +93,7 @@ constexpr int64_t ToMilliseconds(TemporalUnit unit) { case TemporalUnit::Millisecond: return 1; + case TemporalUnit::Unset: case TemporalUnit::Auto: case TemporalUnit::Year: case TemporalUnit::Month: @@ -112,6 +116,7 @@ constexpr int64_t ToSeconds(TemporalUnit unit) { case TemporalUnit::Second: return 1; + case TemporalUnit::Unset: case TemporalUnit::Auto: case TemporalUnit::Year: case TemporalUnit::Month: @@ -141,6 +146,7 @@ constexpr int64_t UnitsPerDay(TemporalUnit unit) { case TemporalUnit::Nanosecond: return 86'400'000'000'000; + case TemporalUnit::Unset: case TemporalUnit::Auto: case TemporalUnit::Year: case TemporalUnit::Month: @@ -152,6 +158,8 @@ constexpr int64_t UnitsPerDay(TemporalUnit unit) { constexpr const char* TemporalUnitToString(TemporalUnit unit) { switch (unit) { + case TemporalUnit::Unset: + return "unset"; case TemporalUnit::Auto: return "auto"; case TemporalUnit::Year: