From eb8f7b303c71ec068e58453d92559e5bc5074fc4 Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Tue, 22 Aug 2023 16:45:22 -0400 Subject: [PATCH] LibLocale+LibJS: Make relative time format APIs infallible These APIs only perform small allocations, and are only used by LibJS. Callers which could only have failed from these APIs are also made to be infallible here. --- .../LibLocale/GenerateRelativeTimeFormatData.cpp | 4 ++-- .../LibJS/Runtime/Intl/RelativeTimeFormat.cpp | 10 +++++----- Userland/Libraries/LibLocale/RelativeTimeFormat.cpp | 2 +- Userland/Libraries/LibLocale/RelativeTimeFormat.h | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Meta/Lagom/Tools/CodeGenerators/LibLocale/GenerateRelativeTimeFormatData.cpp b/Meta/Lagom/Tools/CodeGenerators/LibLocale/GenerateRelativeTimeFormatData.cpp index f1d7eca969..a57bb06fee 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibLocale/GenerateRelativeTimeFormatData.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibLocale/GenerateRelativeTimeFormatData.cpp @@ -245,7 +245,7 @@ static constexpr Array<@relative_time_format_index_type@, @size@> @name@ { {)~~~ generate_mapping(generator, cldr.locales, cldr.unique_formats.type_that_fits(), "s_locale_relative_time_formats"sv, "s_number_systems_digits_{}"sv, nullptr, [&](auto const& name, auto const& value) { append_list(name, value.time_units); }); generator.append(R"~~~( -ErrorOr> get_relative_time_format_patterns(StringView locale, TimeUnit time_unit, StringView tense_or_number, Style style) +Vector get_relative_time_format_patterns(StringView locale, TimeUnit time_unit, StringView tense_or_number, Style style) { Vector formats; @@ -266,7 +266,7 @@ ErrorOr> get_relative_time_format_patterns(StringView if (decode_string(locale_format.tense_or_number) != tense_or_number) continue; - TRY(formats.try_append(locale_format.to_relative_time_format())); + formats.append(locale_format.to_relative_time_format()); } return formats; diff --git a/Userland/Libraries/LibJS/Runtime/Intl/RelativeTimeFormat.cpp b/Userland/Libraries/LibJS/Runtime/Intl/RelativeTimeFormat.cpp index e34bdaedd9..54a7089f65 100644 --- a/Userland/Libraries/LibJS/Runtime/Intl/RelativeTimeFormat.cpp +++ b/Userland/Libraries/LibJS/Runtime/Intl/RelativeTimeFormat.cpp @@ -117,20 +117,20 @@ ThrowCompletionOr> partition_relative_time_patt // then filtering the large set of locale data down to the pattern we are looking for. Instead, // LibUnicode expects the individual options as enumeration values, and returns the couple of // patterns that match those options. - auto find_patterns_for_tense_or_number = [&](StringView tense_or_number) -> ThrowCompletionOr> { + auto find_patterns_for_tense_or_number = [&](StringView tense_or_number) { // 10. If style is equal to "short", then // a. Let entry be the string-concatenation of unit and "-short". // 11. Else if style is equal to "narrow", then // a. Let entry be the string-concatenation of unit and "-narrow". // 12. Else, // a. Let entry be unit. - auto patterns = TRY_OR_THROW_OOM(vm, ::Locale::get_relative_time_format_patterns(data_locale, time_unit, tense_or_number, style)); + auto patterns = ::Locale::get_relative_time_format_patterns(data_locale, time_unit, tense_or_number, style); // 13. If fields doesn't have a field [[]], then if (patterns.is_empty()) { // a. Let entry be unit. // NOTE: In the CLDR, the lack of "short" or "narrow" in the key implies "long". - patterns = TRY_OR_THROW_OOM(vm, ::Locale::get_relative_time_format_patterns(data_locale, time_unit, tense_or_number, ::Locale::Style::Long)); + patterns = ::Locale::get_relative_time_format_patterns(data_locale, time_unit, tense_or_number, ::Locale::Style::Long); } // 14. Let patterns be fields.[[]]. @@ -144,7 +144,7 @@ ThrowCompletionOr> partition_relative_time_patt auto value_string = MUST(Value(value).to_string(vm)); // b. If patterns has a field [[]], then - if (auto patterns = MUST_OR_THROW_OOM(find_patterns_for_tense_or_number(value_string)); !patterns.is_empty()) { + if (auto patterns = find_patterns_for_tense_or_number(value_string); !patterns.is_empty()) { VERIFY(patterns.size() == 1); // i. Let result be patterns.[[]]. @@ -173,7 +173,7 @@ ThrowCompletionOr> partition_relative_time_patt } // 19. Let po be patterns.[[]]. - auto patterns = MUST_OR_THROW_OOM(find_patterns_for_tense_or_number(tense)); + auto patterns = find_patterns_for_tense_or_number(tense); // 20. Let fv be ! PartitionNumberPattern(relativeTimeFormat.[[NumberFormat]], value). auto value_partitions = MUST_OR_THROW_OOM(partition_number_pattern(vm, relative_time_format.number_format(), Value(value))); diff --git a/Userland/Libraries/LibLocale/RelativeTimeFormat.cpp b/Userland/Libraries/LibLocale/RelativeTimeFormat.cpp index dcf5ac856b..8fd447a24d 100644 --- a/Userland/Libraries/LibLocale/RelativeTimeFormat.cpp +++ b/Userland/Libraries/LibLocale/RelativeTimeFormat.cpp @@ -53,6 +53,6 @@ StringView time_unit_to_string(TimeUnit time_unit) } } -ErrorOr> __attribute__((weak)) get_relative_time_format_patterns(StringView, TimeUnit, StringView, Style) { return Vector {}; } +Vector __attribute__((weak)) get_relative_time_format_patterns(StringView, TimeUnit, StringView, Style) { return {}; } } diff --git a/Userland/Libraries/LibLocale/RelativeTimeFormat.h b/Userland/Libraries/LibLocale/RelativeTimeFormat.h index 437c560c61..0d16a57db7 100644 --- a/Userland/Libraries/LibLocale/RelativeTimeFormat.h +++ b/Userland/Libraries/LibLocale/RelativeTimeFormat.h @@ -34,6 +34,6 @@ struct RelativeTimeFormat { Optional time_unit_from_string(StringView time_unit); StringView time_unit_to_string(TimeUnit time_unit); -ErrorOr> get_relative_time_format_patterns(StringView locale, TimeUnit time_unit, StringView tense_or_number, Style style); +Vector get_relative_time_format_patterns(StringView locale, TimeUnit time_unit, StringView tense_or_number, Style style); }