Jelajahi Sumber

LibJS: Mark PartitionDurationFormatPattern as infallible

This is an editorial change in the Intl.DurationFormat proposal. See:
https://github.com/tc39/proposal-intl-duration-format/commit/cea3b68
Timothy Flynn 2 tahun lalu
induk
melakukan
a28ff92106

+ 3 - 3
Userland/Libraries/LibJS/Runtime/Intl/DurationFormat.cpp

@@ -305,7 +305,7 @@ static String convert_number_format_pattern_to_duration_format_template(Unicode:
 }
 
 // 1.1.7 PartitionDurationFormatPattern ( durationFormat, duration ), https://tc39.es/proposal-intl-duration-format/#sec-partitiondurationformatpattern
-ThrowCompletionOr<Vector<PatternPartition>> partition_duration_format_pattern(VM& vm, DurationFormat const& duration_format, Temporal::DurationRecord const& duration)
+Vector<PatternPartition> partition_duration_format_pattern(VM& vm, DurationFormat const& duration_format, Temporal::DurationRecord const& duration)
 {
     auto& realm = *vm.current_realm();
 
@@ -491,8 +491,8 @@ ThrowCompletionOr<Vector<PatternPartition>> partition_duration_format_pattern(VM
         }
     }
 
-    // 4. Let lf be ? Construct(%ListFormat%, « durationFormat.[[Locale]] »).
-    auto* list_format = static_cast<ListFormat*>(TRY(construct(vm, *realm.intrinsics().intl_list_format_constructor(), js_string(vm, duration_format.locale()))));
+    // 4. Let lf be ! Construct(%ListFormat%, « durationFormat.[[Locale]] »).
+    auto* list_format = static_cast<ListFormat*>(MUST(construct(vm, *realm.intrinsics().intl_list_format_constructor(), js_string(vm, duration_format.locale()))));
 
     // FIXME: CreatePartsFromList expects a list of strings and creates a list of Pattern Partition records, but we already created a list of Pattern Partition records
     //  so we try to hack something together from it that looks mostly right

+ 1 - 1
Userland/Libraries/LibJS/Runtime/Intl/DurationFormat.h

@@ -224,6 +224,6 @@ ThrowCompletionOr<Temporal::DurationRecord> to_duration_record(VM&, Value input)
 i8 duration_sign(Temporal::DurationRecord const&);
 bool is_valid_duration_record(Temporal::DurationRecord const&);
 ThrowCompletionOr<DurationUnitOptions> get_duration_unit_options(VM&, String const& unit, Object const& options, StringView base_style, Span<StringView const> styles_list, StringView digital_base, StringView previous_style);
-ThrowCompletionOr<Vector<PatternPartition>> partition_duration_format_pattern(VM&, DurationFormat const&, Temporal::DurationRecord const& duration);
+Vector<PatternPartition> partition_duration_format_pattern(VM&, DurationFormat const&, Temporal::DurationRecord const& duration);
 
 }

+ 5 - 4
Userland/Libraries/LibJS/Runtime/Intl/DurationFormatPrototype.cpp

@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2022, Idan Horowitz <idan.horowitz@serenityos.org>
+ * Copyright (c) 2022, Tim Flynn <trflynn89@serenityos.org>
  *
  * SPDX-License-Identifier: BSD-2-Clause
  */
@@ -45,8 +46,8 @@ JS_DEFINE_NATIVE_FUNCTION(DurationFormatPrototype::format)
     if (!is_valid_duration_record(record))
         return vm.throw_completion<RangeError>(ErrorType::TemporalInvalidDurationLikeObject);
 
-    // 5. Let formatted be ? PartitionDurationFormatPattern(df, record).
-    auto formatted = TRY(partition_duration_format_pattern(vm, *duration_format, record));
+    // 5. Let formatted be ! PartitionDurationFormatPattern(df, record).
+    auto formatted = partition_duration_format_pattern(vm, *duration_format, record);
 
     // 6. Let result be a new empty String.
     StringBuilder result;
@@ -77,8 +78,8 @@ JS_DEFINE_NATIVE_FUNCTION(DurationFormatPrototype::format_to_parts)
     if (!is_valid_duration_record(record))
         return vm.throw_completion<RangeError>(ErrorType::TemporalInvalidDurationLikeObject);
 
-    // 5. Let formatted be ? PartitionDurationFormatPattern(df, record).
-    auto formatted = TRY(partition_duration_format_pattern(vm, *duration_format, record));
+    // 5. Let formatted be ! PartitionDurationFormatPattern(df, record).
+    auto formatted = partition_duration_format_pattern(vm, *duration_format, record);
 
     // 6. Let result be ! ArrayCreate(0).
     auto* result = MUST(Array::create(realm, 0));