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.
This commit is contained in:
Timothy Flynn 2023-08-22 16:45:22 -04:00 committed by Andreas Kling
parent 7536648498
commit eb8f7b303c
Notes: sideshowbarker 2024-07-16 16:23:32 +09:00
4 changed files with 9 additions and 9 deletions

View file

@ -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<Vector<RelativeTimeFormat>> get_relative_time_format_patterns(StringView locale, TimeUnit time_unit, StringView tense_or_number, Style style)
Vector<RelativeTimeFormat> get_relative_time_format_patterns(StringView locale, TimeUnit time_unit, StringView tense_or_number, Style style)
{
Vector<RelativeTimeFormat> formats;
@ -266,7 +266,7 @@ ErrorOr<Vector<RelativeTimeFormat>> 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;

View file

@ -117,20 +117,20 @@ ThrowCompletionOr<Vector<PatternPartitionWithUnit>> 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<Vector<::Locale::RelativeTimeFormat>> {
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 [[<entry>]], 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.[[<entry>]].
@ -144,7 +144,7 @@ ThrowCompletionOr<Vector<PatternPartitionWithUnit>> partition_relative_time_patt
auto value_string = MUST(Value(value).to_string(vm));
// b. If patterns has a field [[<valueString>]], 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.[[<valueString>]].
@ -173,7 +173,7 @@ ThrowCompletionOr<Vector<PatternPartitionWithUnit>> partition_relative_time_patt
}
// 19. Let po be patterns.[[<tl>]].
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)));

View file

@ -53,6 +53,6 @@ StringView time_unit_to_string(TimeUnit time_unit)
}
}
ErrorOr<Vector<RelativeTimeFormat>> __attribute__((weak)) get_relative_time_format_patterns(StringView, TimeUnit, StringView, Style) { return Vector<RelativeTimeFormat> {}; }
Vector<RelativeTimeFormat> __attribute__((weak)) get_relative_time_format_patterns(StringView, TimeUnit, StringView, Style) { return {}; }
}

View file

@ -34,6 +34,6 @@ struct RelativeTimeFormat {
Optional<TimeUnit> time_unit_from_string(StringView time_unit);
StringView time_unit_to_string(TimeUnit time_unit);
ErrorOr<Vector<RelativeTimeFormat>> get_relative_time_format_patterns(StringView locale, TimeUnit time_unit, StringView tense_or_number, Style style);
Vector<RelativeTimeFormat> get_relative_time_format_patterns(StringView locale, TimeUnit time_unit, StringView tense_or_number, Style style);
}