From e520ce22718a2242a5867224e1b34952a74a529a Mon Sep 17 00:00:00 2001 From: wangrx Date: Tue, 20 Feb 2024 19:55:12 +0800 Subject: [PATCH] Fix intl/displaynames/constructor-order-v2.js --- ecmascript/global_env_constants.h | 1 + ecmascript/js_displaynames.cpp | 9 +++++++++ ecmascript/js_displaynames.h | 8 ++++++++ 3 files changed, 18 insertions(+) diff --git a/ecmascript/global_env_constants.h b/ecmascript/global_env_constants.h index d5e0c80cea..71020cf48f 100644 --- a/ecmascript/global_env_constants.h +++ b/ecmascript/global_env_constants.h @@ -285,6 +285,7 @@ class ObjectFactory; V(SegmentString, SEGMENT_STRING_INDEX, "segment") \ V(IsWordLikeString, ISWORDLIKE_STRING_INDEX, "isWordLike") \ V(LocaleMatcherString, LOCALE_MATCHER_STRING_INDEX, "localeMatcher") \ + V(LanguageDisplayString, LAUGUAGE_DISPLAY_STRING_INDEX, "languageDisplay") \ V(FormatMatcherString, FORMAT_MATCHER_STRING_INDEX, "formatMatcher") \ V(Hour12String, HOUR12_STRING_INDEX, "hour12") \ V(H11String, H11_STRING_INDEX, "h11") \ diff --git a/ecmascript/js_displaynames.cpp b/ecmascript/js_displaynames.cpp index ea36001ec8..f0293a3c05 100644 --- a/ecmascript/js_displaynames.cpp +++ b/ecmascript/js_displaynames.cpp @@ -194,6 +194,15 @@ JSHandle JSDisplayNames::InitializeDisplayNames(JSThread *thread // 17. Set displayNames.[[Fallback]] to fallback. displayNames->SetFallback(fallback); + // Let languageDisplay be ? GetOption(options, "languageDisplay", string, « "dialect", "standard" », "dialect"). + property = globalConst->GetHandledLanguageDisplayString(); + auto langDisplay = JSLocale::GetOptionOfString(thread, optionsObject, property, + {LanguageDisplayOption::DIALECT, LanguageDisplayOption::STANDARD}, + {"dialect", "standard"}, + LanguageDisplayOption::DIALECT); + RETURN_HANDLE_IF_ABRUPT_COMPLETION(JSDisplayNames, thread); + displayNames->SetLanguageDisplay(langDisplay); + // 18. Set displayNames.[[Locale]] to the value of r.[[Locale]]. JSHandle localeStr = intl::LocaleHelper::ToLanguageTag(thread, icuLocale); RETURN_HANDLE_IF_ABRUPT_COMPLETION(JSDisplayNames, thread); diff --git a/ecmascript/js_displaynames.h b/ecmascript/js_displaynames.h index f1b81cc2cb..b832391244 100644 --- a/ecmascript/js_displaynames.h +++ b/ecmascript/js_displaynames.h @@ -55,6 +55,12 @@ enum class FallbackOption : uint8_t { EXCEPTION }; +enum class LanguageDisplayOption : uint8_t { + DIALECT = 0x01, + STANDARD, + EXCEPTION +}; + class JSDisplayNames : public JSObject { public: CAST_CHECK(JSDisplayNames, IsJSDisplayNames); @@ -69,9 +75,11 @@ public: static constexpr size_t TYPE_BITS = 4; static constexpr size_t STYLE_BITS = 3; static constexpr size_t FALL_BACK_BITS = 2; + static constexpr size_t LANGUAGE_DISPLAY_BITS = 2; FIRST_BIT_FIELD(BitField, Type, TypednsOption, TYPE_BITS) NEXT_BIT_FIELD(BitField, Style, StyOption, STYLE_BITS, Type) NEXT_BIT_FIELD(BitField, Fallback, FallbackOption, FALL_BACK_BITS, Style) + NEXT_BIT_FIELD(BitField, LanguageDisplay, LanguageDisplayOption, LANGUAGE_DISPLAY_BITS, Fallback) DECL_VISIT_OBJECT_FOR_JS_OBJECT(JSObject, LOCALE_OFFSET, BIT_FIELD_OFFSET) DECL_DUMP() -- Gitee