From 2d9405e5d70ff16961c5eb0e9c437ef6a295a9b4 Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Tue, 26 Nov 2024 08:34:55 -0500 Subject: [PATCH] LibJS: Use the TimeDuration alias a bit less in Temporal It was a bit of a semantic mistake too use this alias too eagerly. Namely, it should not be used to refer to epoch nanoseconds. We now only use the TimeDuration alias where the spec refers to a value as a time duration. --- Libraries/LibJS/Runtime/Temporal/Duration.cpp | 22 +++++++++---------- Libraries/LibJS/Runtime/Temporal/Duration.h | 12 +++++----- .../LibJS/Runtime/Temporal/PlainTime.cpp | 12 +++++----- Libraries/LibJS/Runtime/Temporal/PlainTime.h | 2 +- 4 files changed, 24 insertions(+), 24 deletions(-) diff --git a/Libraries/LibJS/Runtime/Temporal/Duration.cpp b/Libraries/LibJS/Runtime/Temporal/Duration.cpp index 7dd9b85e170..9bbc5945e55 100644 --- a/Libraries/LibJS/Runtime/Temporal/Duration.cpp +++ b/Libraries/LibJS/Runtime/Temporal/Duration.cpp @@ -756,7 +756,7 @@ i8 compare_time_duration(TimeDuration const& one, TimeDuration const& two) } // 7.5.26 TimeDurationFromEpochNanosecondsDifference ( one, two ), https://tc39.es/proposal-temporal/#sec-temporal-timedurationfromepochnanosecondsdifference -TimeDuration time_duration_from_epoch_nanoseconds_difference(TimeDuration const& one, TimeDuration const& two) +TimeDuration time_duration_from_epoch_nanoseconds_difference(Crypto::SignedBigInteger const& one, Crypto::SignedBigInteger const& two) { // 1. Let result be ℝ(one) - ℝ(two). auto result = one.minus(two); @@ -848,7 +848,7 @@ Crypto::BigFraction total_time_duration(TimeDuration const& time_duration, Unit } // 7.5.33 NudgeToCalendarUnit ( sign, duration, destEpochNs, isoDateTime, timeZone, calendar, increment, unit, roundingMode ), https://tc39.es/proposal-temporal/#sec-temporal-nudgetocalendarunit -ThrowCompletionOr nudge_to_calendar_unit(VM& vm, i8 sign, InternalDuration const& duration, TimeDuration const& dest_epoch_ns, ISODateTime const& iso_date_time, Optional time_zone, StringView calendar, u64 increment, Unit unit, RoundingMode rounding_mode) +ThrowCompletionOr nudge_to_calendar_unit(VM& vm, i8 sign, InternalDuration const& duration, Crypto::SignedBigInteger const& dest_epoch_ns, ISODateTime const& iso_date_time, Optional time_zone, StringView calendar, u64 increment, Unit unit, RoundingMode rounding_mode) { DateDuration start_duration; DateDuration end_duration; @@ -959,8 +959,8 @@ ThrowCompletionOr nudge_to_calendar_unit(VM& vm, i8 sign, I // 10. Let endDateTime be CombineISODateAndTimeRecord(end, isoDateTime.[[Time]]). auto end_date_time = combine_iso_date_and_time_record(end, iso_date_time.time); - TimeDuration start_epoch_ns; - TimeDuration end_epoch_ns; + Crypto::SignedBigInteger start_epoch_ns; + Crypto::SignedBigInteger end_epoch_ns; // 11. If timeZone is UNSET, then if (!time_zone.has_value()) { @@ -1042,7 +1042,7 @@ ThrowCompletionOr nudge_to_calendar_unit(VM& vm, i8 sign, I auto did_expand_calendar_unit = false; DateDuration result_duration; - TimeDuration nudged_epoch_ns; + Crypto::SignedBigInteger nudged_epoch_ns; // 24. If roundedUnit is abs(r2), then if (rounded_unit == fabs(r2)) { @@ -1116,7 +1116,7 @@ ThrowCompletionOr nudge_to_zoned_time(VM& vm, i8 sign, Inte auto beyond_day_span = TRY(add_time_duration(vm, rounded_time_duration, day_span)); auto did_round_beyond_day = false; - TimeDuration nudged_epoch_ns; + Crypto::SignedBigInteger nudged_epoch_ns; i8 day_delta = 0; // 12. If TimeDurationSign(beyondDaySpan) ≠ -sign, then @@ -1156,7 +1156,7 @@ ThrowCompletionOr nudge_to_zoned_time(VM& vm, i8 sign, Inte } // 7.5.35 NudgeToDayOrTime ( duration, destEpochNs, largestUnit, increment, smallestUnit, roundingMode ), https://tc39.es/proposal-temporal/#sec-temporal-nudgetodayortime -ThrowCompletionOr nudge_to_day_or_time(VM& vm, InternalDuration const& duration, TimeDuration const& dest_epoch_ns, Unit largest_unit, u64 increment, Unit smallest_unit, RoundingMode rounding_mode) +ThrowCompletionOr nudge_to_day_or_time(VM& vm, InternalDuration const& duration, Crypto::SignedBigInteger const& dest_epoch_ns, Unit largest_unit, u64 increment, Unit smallest_unit, RoundingMode rounding_mode) { // 1. Let timeDuration be ! Add24HourDaysToTimeDuration(duration.[[Time]], duration.[[Date]].[[Days]]). auto time_duration = MUST(add_24_hour_days_to_time_duration(vm, duration.time, duration.date.days)); @@ -1219,7 +1219,7 @@ ThrowCompletionOr nudge_to_day_or_time(VM& vm, InternalDura } // 7.5.36 BubbleRelativeDuration ( sign, duration, nudgedEpochNs, isoDateTime, timeZone, calendar, largestUnit, smallestUnit ), https://tc39.es/proposal-temporal/#sec-temporal-bubblerelativeduration -ThrowCompletionOr bubble_relative_duration(VM& vm, i8 sign, InternalDuration duration, TimeDuration const& nudged_epoch_ns, ISODateTime const& iso_date_time, Optional time_zone, StringView calendar, Unit largest_unit, Unit smallest_unit) +ThrowCompletionOr bubble_relative_duration(VM& vm, i8 sign, InternalDuration duration, Crypto::SignedBigInteger const& nudged_epoch_ns, ISODateTime const& iso_date_time, Optional time_zone, StringView calendar, Unit largest_unit, Unit smallest_unit) { // 1. If smallestUnit is largestUnit, return duration. if (smallest_unit == largest_unit) @@ -1280,7 +1280,7 @@ ThrowCompletionOr bubble_relative_duration(VM& vm, i8 sign, In // v. Let endDateTime be CombineISODateAndTimeRecord(end, isoDateTime.[[Time]]). auto end_date_time = combine_iso_date_and_time_record(end, iso_date_time.time); - TimeDuration end_epoch_ns; + Crypto::SignedBigInteger end_epoch_ns; // vi. If timeZone is UNSET, then if (!time_zone.has_value()) { @@ -1320,7 +1320,7 @@ ThrowCompletionOr bubble_relative_duration(VM& vm, i8 sign, In } // 7.5.37 RoundRelativeDuration ( duration, destEpochNs, isoDateTime, timeZone, calendar, largestUnit, increment, smallestUnit, roundingMode ), https://tc39.es/proposal-temporal/#sec-temporal-roundrelativeduration -ThrowCompletionOr round_relative_duration(VM& vm, InternalDuration duration, TimeDuration const& dest_epoch_ns, ISODateTime const& iso_date_time, Optional time_zone, StringView calendar, Unit largest_unit, u64 increment, Unit smallest_unit, RoundingMode rounding_mode) +ThrowCompletionOr round_relative_duration(VM& vm, InternalDuration duration, Crypto::SignedBigInteger const& dest_epoch_ns, ISODateTime const& iso_date_time, Optional time_zone, StringView calendar, Unit largest_unit, u64 increment, Unit smallest_unit, RoundingMode rounding_mode) { // 1. Let irregularLengthUnit be false. auto irregular_length_unit = false; @@ -1374,7 +1374,7 @@ ThrowCompletionOr round_relative_duration(VM& vm, InternalDura } // 7.5.38 TotalRelativeDuration ( duration, destEpochNs, isoDateTime, timeZone, calendar, unit ), https://tc39.es/proposal-temporal/#sec-temporal-totalrelativeduration -ThrowCompletionOr total_relative_duration(VM& vm, InternalDuration const& duration, TimeDuration const& dest_epoch_ns, ISODateTime const& iso_date_time, Optional time_zone, StringView calendar, Unit unit) +ThrowCompletionOr total_relative_duration(VM& vm, InternalDuration const& duration, Crypto::SignedBigInteger const& dest_epoch_ns, ISODateTime const& iso_date_time, Optional time_zone, StringView calendar, Unit unit) { // 1. If IsCalendarUnit(unit) is true, or timeZone is not UNSET and unit is DAY, then if (is_calendar_unit(unit) || (time_zone.has_value() && unit == Unit::Day)) { diff --git a/Libraries/LibJS/Runtime/Temporal/Duration.h b/Libraries/LibJS/Runtime/Temporal/Duration.h index 1ed98d76bc0..2c81095c61d 100644 --- a/Libraries/LibJS/Runtime/Temporal/Duration.h +++ b/Libraries/LibJS/Runtime/Temporal/Duration.h @@ -100,7 +100,7 @@ struct InternalDuration { // 7.5.32 Duration Nudge Result Records, https://tc39.es/proposal-temporal/#sec-temporal-duration-nudge-result-records struct DurationNudgeResult { InternalDuration duration; - TimeDuration nudged_epoch_ns; + Crypto::SignedBigInteger nudged_epoch_ns; bool did_expand_calendar_unit { false }; }; @@ -131,17 +131,17 @@ ThrowCompletionOr add_time_duration(VM&, TimeDuration const&, Time ThrowCompletionOr add_24_hour_days_to_time_duration(VM&, TimeDuration const&, double days); TimeDuration add_time_duration_to_epoch_nanoseconds(TimeDuration const& duration, TimeDuration const& epoch_nanoseconds); i8 compare_time_duration(TimeDuration const&, TimeDuration const&); -TimeDuration time_duration_from_epoch_nanoseconds_difference(TimeDuration const&, TimeDuration const&); +TimeDuration time_duration_from_epoch_nanoseconds_difference(Crypto::SignedBigInteger const&, Crypto::SignedBigInteger const&); ThrowCompletionOr round_time_duration_to_increment(VM&, TimeDuration const&, Crypto::UnsignedBigInteger const& increment, RoundingMode); i8 time_duration_sign(TimeDuration const&); ThrowCompletionOr date_duration_days(VM&, DateDuration const&, PlainDate const&); ThrowCompletionOr round_time_duration(VM&, TimeDuration const&, Crypto::UnsignedBigInteger const& increment, Unit, RoundingMode); Crypto::BigFraction total_time_duration(TimeDuration const&, Unit); -ThrowCompletionOr nudge_to_calendar_unit(VM&, i8 sign, InternalDuration const&, TimeDuration const& dest_epoch_ns, ISODateTime const&, Optional time_zone, StringView calendar, u64 increment, Unit, RoundingMode); +ThrowCompletionOr nudge_to_calendar_unit(VM&, i8 sign, InternalDuration const&, Crypto::SignedBigInteger const& dest_epoch_ns, ISODateTime const&, Optional time_zone, StringView calendar, u64 increment, Unit, RoundingMode); ThrowCompletionOr nudge_to_zoned_time(VM&, i8 sign, InternalDuration const&, ISODateTime const&, StringView time_zone, StringView calendar, u64 increment, Unit, RoundingMode); -ThrowCompletionOr nudge_to_day_or_time(VM&, InternalDuration const&, TimeDuration const& dest_epoch_ns, Unit largest_unit, u64 increment, Unit smallest_unit, RoundingMode); -ThrowCompletionOr bubble_relative_duration(VM&, i8 sign, InternalDuration, TimeDuration const& nudged_epoch_ns, ISODateTime const&, Optional time_zone, StringView calendar, Unit largest_unit, Unit smallest_unit); -ThrowCompletionOr round_relative_duration(VM&, InternalDuration, TimeDuration const& dest_epoch_ns, ISODateTime const&, Optional time_zone, StringView calendar, Unit largest_unit, u64 increment, Unit smallest_unit, RoundingMode); +ThrowCompletionOr nudge_to_day_or_time(VM&, InternalDuration const&, Crypto::SignedBigInteger const& dest_epoch_ns, Unit largest_unit, u64 increment, Unit smallest_unit, RoundingMode); +ThrowCompletionOr bubble_relative_duration(VM&, i8 sign, InternalDuration, Crypto::SignedBigInteger const& nudged_epoch_ns, ISODateTime const&, Optional time_zone, StringView calendar, Unit largest_unit, Unit smallest_unit); +ThrowCompletionOr round_relative_duration(VM&, InternalDuration, Crypto::SignedBigInteger const& dest_epoch_ns, ISODateTime const&, Optional time_zone, StringView calendar, Unit largest_unit, u64 increment, Unit smallest_unit, RoundingMode); ThrowCompletionOr total_relative_duration(VM&, InternalDuration const&, TimeDuration const&, ISODateTime const&, Optional time_zone, StringView calendar, Unit); String temporal_duration_to_string(Duration const&, Precision); ThrowCompletionOr> add_durations(VM&, ArithmeticOperation, Duration const&, Value); diff --git a/Libraries/LibJS/Runtime/Temporal/PlainTime.cpp b/Libraries/LibJS/Runtime/Temporal/PlainTime.cpp index 49ebf815d42..80cab7bde2b 100644 --- a/Libraries/LibJS/Runtime/Temporal/PlainTime.cpp +++ b/Libraries/LibJS/Runtime/Temporal/PlainTime.cpp @@ -330,34 +330,34 @@ Time balance_time(double hour, double minute, double second, double millisecond, } // 4.5.10 BalanceTime ( hour, minute, second, millisecond, microsecond, nanosecond ), https://tc39.es/proposal-temporal/#sec-temporal-balancetime -Time balance_time(double hour, double minute, double second, double millisecond, double microsecond, TimeDuration const& nanosecond_value) +Time balance_time(double hour, double minute, double second, double millisecond, double microsecond, Crypto::SignedBigInteger const& nanosecond_value) { // 1. Set microsecond to microsecond + floor(nanosecond / 1000). - auto microsecond_value = TimeDuration { microsecond }.plus(big_floor(nanosecond_value, NANOSECONDS_PER_MICROSECOND)); + auto microsecond_value = Crypto::SignedBigInteger { microsecond }.plus(big_floor(nanosecond_value, NANOSECONDS_PER_MICROSECOND)); // 2. Set nanosecond to nanosecond modulo 1000. auto nanosecond = modulo(nanosecond_value, NANOSECONDS_PER_MICROSECOND).to_double(); // 3. Set millisecond to millisecond + floor(microsecond / 1000). - auto millisecond_value = TimeDuration { millisecond }.plus(big_floor(microsecond_value, MICROSECONDS_PER_MILLISECOND)); + auto millisecond_value = Crypto::SignedBigInteger { millisecond }.plus(big_floor(microsecond_value, MICROSECONDS_PER_MILLISECOND)); // 4. Set microsecond to microsecond modulo 1000. microsecond = modulo(microsecond_value, MICROSECONDS_PER_MILLISECOND).to_double(); // 5. Set second to second + floor(millisecond / 1000). - auto second_value = TimeDuration { second }.plus(big_floor(millisecond_value, MILLISECONDS_PER_SECOND)); + auto second_value = Crypto::SignedBigInteger { second }.plus(big_floor(millisecond_value, MILLISECONDS_PER_SECOND)); // 6. Set millisecond to millisecond modulo 1000. millisecond = modulo(millisecond_value, MILLISECONDS_PER_SECOND).to_double(); // 7. Set minute to minute + floor(second / 60). - auto minute_value = TimeDuration { minute }.plus(big_floor(second_value, SECONDS_PER_MINUTE)); + auto minute_value = Crypto::SignedBigInteger { minute }.plus(big_floor(second_value, SECONDS_PER_MINUTE)); // 8. Set second to second modulo 60. second = modulo(second_value, SECONDS_PER_MINUTE).to_double(); // 9. Set hour to hour + floor(minute / 60). - auto hour_value = TimeDuration { hour }.plus(big_floor(minute_value, MINUTES_PER_HOUR)); + auto hour_value = Crypto::SignedBigInteger { hour }.plus(big_floor(minute_value, MINUTES_PER_HOUR)); // 10. Set minute to minute modulo 60. minute = modulo(minute_value, MINUTES_PER_HOUR).to_double(); diff --git a/Libraries/LibJS/Runtime/Temporal/PlainTime.h b/Libraries/LibJS/Runtime/Temporal/PlainTime.h index 4e25d57b0ad..c8b93b1e953 100644 --- a/Libraries/LibJS/Runtime/Temporal/PlainTime.h +++ b/Libraries/LibJS/Runtime/Temporal/PlainTime.h @@ -57,7 +57,7 @@ ThrowCompletionOr