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