diff --git a/Userland/Libraries/LibJS/Runtime/Temporal/AbstractOperations.cpp b/Userland/Libraries/LibJS/Runtime/Temporal/AbstractOperations.cpp index 13d51ae253..07ee3eec05 100644 --- a/Userland/Libraries/LibJS/Runtime/Temporal/AbstractOperations.cpp +++ b/Userland/Libraries/LibJS/Runtime/Temporal/AbstractOperations.cpp @@ -214,12 +214,12 @@ ThrowCompletionOr to_temporal_overflow(GlobalObject& global_object, Obje } // 13.8 ToTemporalRoundingMode ( normalizedOptions, fallback ), https://tc39.es/proposal-temporal/#sec-temporal-totemporalroundingmode -Optional to_temporal_rounding_mode(GlobalObject& global_object, Object const& normalized_options, String const& fallback) +ThrowCompletionOr to_temporal_rounding_mode(GlobalObject& global_object, Object const& normalized_options, String const& fallback) { auto& vm = global_object.vm(); // 1. Return ? GetOption(normalizedOptions, "roundingMode", « String », « "ceil", "floor", "trunc", "halfExpand" », fallback). - auto option = TRY_OR_DISCARD(get_option(global_object, normalized_options, vm.names.roundingMode, { OptionType::String }, { "ceil"sv, "floor"sv, "trunc"sv, "halfExpand"sv }, js_string(vm, fallback))); + auto option = TRY(get_option(global_object, normalized_options, vm.names.roundingMode, { OptionType::String }, { "ceil"sv, "floor"sv, "trunc"sv, "halfExpand"sv }, js_string(vm, fallback))); VERIFY(option.is_string()); return option.as_string().string(); diff --git a/Userland/Libraries/LibJS/Runtime/Temporal/AbstractOperations.h b/Userland/Libraries/LibJS/Runtime/Temporal/AbstractOperations.h index 305e3c5dc2..1a2dac3ae2 100644 --- a/Userland/Libraries/LibJS/Runtime/Temporal/AbstractOperations.h +++ b/Userland/Libraries/LibJS/Runtime/Temporal/AbstractOperations.h @@ -90,7 +90,7 @@ ThrowCompletionOr get_option(GlobalObject&, Object const& options, Proper template ThrowCompletionOr> get_string_or_number_option(GlobalObject&, Object const& options, PropertyName const& property, Vector const& string_values, NumberType minimum, NumberType maximum, Value fallback); ThrowCompletionOr to_temporal_overflow(GlobalObject&, Object const& normalized_options); -Optional to_temporal_rounding_mode(GlobalObject&, Object const& normalized_options, String const& fallback); +ThrowCompletionOr to_temporal_rounding_mode(GlobalObject&, Object const& normalized_options, String const& fallback); Optional to_show_calendar_option(GlobalObject&, Object const& normalized_options); u64 to_temporal_rounding_increment(GlobalObject&, Object const& normalized_options, Optional dividend, bool inclusive); Optional to_seconds_string_precision(GlobalObject&, Object const& normalized_options); diff --git a/Userland/Libraries/LibJS/Runtime/Temporal/InstantPrototype.cpp b/Userland/Libraries/LibJS/Runtime/Temporal/InstantPrototype.cpp index 23e9c17db6..3332a6b69e 100644 --- a/Userland/Libraries/LibJS/Runtime/Temporal/InstantPrototype.cpp +++ b/Userland/Libraries/LibJS/Runtime/Temporal/InstantPrototype.cpp @@ -211,9 +211,7 @@ JS_DEFINE_NATIVE_FUNCTION(InstantPrototype::until) return {}; // 9. Let roundingMode be ? ToTemporalRoundingMode(options, "trunc"). - auto rounding_mode = to_temporal_rounding_mode(global_object, *options, "trunc"sv); - if (vm.exception()) - return {}; + auto rounding_mode = TRY_OR_DISCARD(to_temporal_rounding_mode(global_object, *options, "trunc"sv)); // 10. Let maximum be ! MaximumTemporalDurationRoundingIncrement(smallestUnit). auto maximum = maximum_temporal_duration_rounding_increment(*smallest_unit); @@ -224,7 +222,7 @@ JS_DEFINE_NATIVE_FUNCTION(InstantPrototype::until) return {}; // 12. Let roundedNs be ! DifferenceInstant(instant.[[Nanoseconds]], other.[[Nanoseconds]], roundingIncrement, smallestUnit, roundingMode). - auto rounded_ns = difference_instant(global_object, instant->nanoseconds(), other->nanoseconds(), rounding_increment, *smallest_unit, *rounding_mode); + auto rounded_ns = difference_instant(global_object, instant->nanoseconds(), other->nanoseconds(), rounding_increment, *smallest_unit, rounding_mode); // 13. Let result be ! BalanceDuration(0, 0, 0, 0, 0, 0, roundedNs, largestUnit). auto result = balance_duration(global_object, 0, 0, 0, 0, 0, 0, *rounded_ns, *largest_unit); @@ -269,9 +267,7 @@ JS_DEFINE_NATIVE_FUNCTION(InstantPrototype::since) return {}; // 9. Let roundingMode be ? ToTemporalRoundingMode(options, "trunc"). - auto rounding_mode = to_temporal_rounding_mode(global_object, *options, "trunc"sv); - if (vm.exception()) - return {}; + auto rounding_mode = TRY_OR_DISCARD(to_temporal_rounding_mode(global_object, *options, "trunc"sv)); // 10. Let maximum be ! MaximumTemporalDurationRoundingIncrement(smallestUnit). auto maximum = maximum_temporal_duration_rounding_increment(*smallest_unit); @@ -282,7 +278,7 @@ JS_DEFINE_NATIVE_FUNCTION(InstantPrototype::since) return {}; // 12. Let roundedNs be ! DifferenceInstant(other.[[Nanoseconds]], instant.[[Nanoseconds]], roundingIncrement, smallestUnit, roundingMode). - auto rounded_ns = difference_instant(global_object, other->nanoseconds(), instant->nanoseconds(), rounding_increment, *smallest_unit, *rounding_mode); + auto rounded_ns = difference_instant(global_object, other->nanoseconds(), instant->nanoseconds(), rounding_increment, *smallest_unit, rounding_mode); // 13. Let result be ! BalanceDuration(0, 0, 0, 0, 0, 0, roundedNs, largestUnit). auto result = balance_duration(global_object, 0, 0, 0, 0, 0, 0, *rounded_ns, *largest_unit); @@ -324,9 +320,7 @@ JS_DEFINE_NATIVE_FUNCTION(InstantPrototype::round) auto& smallest_unit = *smallest_unit_value; // 7. Let roundingMode be ? ToTemporalRoundingMode(options, "halfExpand"). - auto rounding_mode = to_temporal_rounding_mode(global_object, *options, "halfExpand"); - if (vm.exception()) - return {}; + auto rounding_mode = TRY_OR_DISCARD(to_temporal_rounding_mode(global_object, *options, "halfExpand")); double maximum; // 8. If smallestUnit is "hour", then @@ -368,7 +362,7 @@ JS_DEFINE_NATIVE_FUNCTION(InstantPrototype::round) return {}; // 15. Let roundedNs be ? RoundTemporalInstant(instant.[[Nanoseconds]], roundingIncrement, smallestUnit, roundingMode). - auto* rounded_ns = round_temporal_instant(global_object, instant->nanoseconds(), rounding_increment, smallest_unit, *rounding_mode); + auto* rounded_ns = round_temporal_instant(global_object, instant->nanoseconds(), rounding_increment, smallest_unit, rounding_mode); if (vm.exception()) return {}; @@ -427,12 +421,10 @@ JS_DEFINE_NATIVE_FUNCTION(InstantPrototype::to_string) return {}; // 7. Let roundingMode be ? ToTemporalRoundingMode(options, "trunc"). - auto rounding_mode = to_temporal_rounding_mode(global_object, *options, "trunc"sv); - if (vm.exception()) - return {}; + auto rounding_mode = TRY_OR_DISCARD(to_temporal_rounding_mode(global_object, *options, "trunc"sv)); // 8. Let roundedNs be ? RoundTemporalInstant(instant.[[Nanoseconds]], precision.[[Increment]], precision.[[Unit]], roundingMode). - auto* rounded_ns = round_temporal_instant(global_object, instant->nanoseconds(), precision->increment, precision->unit, *rounding_mode); + auto* rounded_ns = round_temporal_instant(global_object, instant->nanoseconds(), precision->increment, precision->unit, rounding_mode); if (vm.exception()) return {}; diff --git a/Userland/Libraries/LibJS/Runtime/Temporal/PlainTimePrototype.cpp b/Userland/Libraries/LibJS/Runtime/Temporal/PlainTimePrototype.cpp index 0ae03eb29f..d9a9f84bc3 100644 --- a/Userland/Libraries/LibJS/Runtime/Temporal/PlainTimePrototype.cpp +++ b/Userland/Libraries/LibJS/Runtime/Temporal/PlainTimePrototype.cpp @@ -353,12 +353,10 @@ JS_DEFINE_NATIVE_FUNCTION(PlainTimePrototype::to_string) return {}; // 5. Let roundingMode be ? ToTemporalRoundingMode(options, "trunc"). - auto rounding_mode = to_temporal_rounding_mode(global_object, *options, "trunc"sv); - if (vm.exception()) - return {}; + auto rounding_mode = TRY_OR_DISCARD(to_temporal_rounding_mode(global_object, *options, "trunc"sv)); // 6. Let roundResult be ! RoundTime(temporalTime.[[ISOHour]], temporalTime.[[ISOMinute]], temporalTime.[[ISOSecond]], temporalTime.[[ISOMillisecond]], temporalTime.[[ISOMicrosecond]], temporalTime.[[ISONanosecond]], precision.[[Increment]], precision.[[Unit]], roundingMode). - auto round_result = round_time(global_object, temporal_time->iso_hour(), temporal_time->iso_minute(), temporal_time->iso_second(), temporal_time->iso_millisecond(), temporal_time->iso_microsecond(), temporal_time->iso_nanosecond(), precision->increment, precision->unit, *rounding_mode); + auto round_result = round_time(global_object, temporal_time->iso_hour(), temporal_time->iso_minute(), temporal_time->iso_second(), temporal_time->iso_millisecond(), temporal_time->iso_microsecond(), temporal_time->iso_nanosecond(), precision->increment, precision->unit, rounding_mode); // 7. Return ! TemporalTimeToString(roundResult.[[Hour]], roundResult.[[Minute]], roundResult.[[Second]], roundResult.[[Millisecond]], roundResult.[[Microsecond]], roundResult.[[Nanosecond]], precision.[[Precision]]). auto string = temporal_time_to_string(round_result.hour, round_result.minute, round_result.second, round_result.millisecond, round_result.microsecond, round_result.nanosecond, precision->precision);