From be8907e6bb47f55ee65009cdcefdbe40fa9099c7 Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Thu, 19 Jan 2023 17:11:00 -0500 Subject: [PATCH] LibJS: Return OptionalNone in fallible functions in the Intl namespace --- .../Libraries/LibJS/Runtime/Intl/AbstractOperations.cpp | 9 +++++---- .../Libraries/LibJS/Runtime/Intl/LocaleConstructor.cpp | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/Userland/Libraries/LibJS/Runtime/Intl/AbstractOperations.cpp b/Userland/Libraries/LibJS/Runtime/Intl/AbstractOperations.cpp index f600d3ba0c..f0722a4499 100644 --- a/Userland/Libraries/LibJS/Runtime/Intl/AbstractOperations.cpp +++ b/Userland/Libraries/LibJS/Runtime/Intl/AbstractOperations.cpp @@ -41,16 +41,16 @@ ThrowCompletionOr> is_structurally_valid_language_t // locale can be generated from the EBNF grammar for unicode_locale_id in Unicode Technical Standard #35 LDML § 3.2 Unicode Locale Identifier; auto locale_id = TRY_OR_THROW_OOM(vm, ::Locale::parse_unicode_locale_id(locale)); if (!locale_id.has_value()) - return Optional<::Locale::LocaleID> {}; + return OptionalNone {}; // locale does not use any of the backwards compatibility syntax described in Unicode Technical Standard #35 LDML § 3.3 BCP 47 Conformance; // https://unicode.org/reports/tr35/#BCP_47_Conformance if (locale.contains('_') || locale_id->language_id.is_root || !locale_id->language_id.language.has_value()) - return Optional<::Locale::LocaleID> {}; + return OptionalNone {}; // the unicode_language_id within locale contains no duplicate unicode_variant_subtag subtags; and if (TRY(contains_duplicate_variant(locale_id->language_id.variants))) - return Optional<::Locale::LocaleID> {}; + return OptionalNone {}; // if locale contains an extensions* component, that component Vector unique_keys; @@ -64,7 +64,8 @@ ThrowCompletionOr> is_structurally_valid_language_t [](::Locale::OtherExtension const& ext) { return static_cast(to_ascii_lowercase(ext.key)); }); if (unique_keys.contains_slow(key)) - return Optional<::Locale::LocaleID> {}; + return OptionalNone {}; + TRY_OR_THROW_OOM(vm, unique_keys.try_append(key)); // if a transformed_extensions component that contains a tlang component is present, then diff --git a/Userland/Libraries/LibJS/Runtime/Intl/LocaleConstructor.cpp b/Userland/Libraries/LibJS/Runtime/Intl/LocaleConstructor.cpp index 3bcd7653d2..e0d8fc3a3b 100644 --- a/Userland/Libraries/LibJS/Runtime/Intl/LocaleConstructor.cpp +++ b/Userland/Libraries/LibJS/Runtime/Intl/LocaleConstructor.cpp @@ -32,7 +32,7 @@ static ThrowCompletionOr> get_string_option(VM& vm, Object cons { auto option = TRY(get_option(vm, options, property, OptionType::String, values, Empty {})); if (option.is_undefined()) - return Optional {}; + return OptionalNone {}; if (validator && !validator(TRY(option.as_string().utf8_string_view()))) return vm.throw_completion(ErrorType::OptionIsNotValidValue, option, property);