diff options
Diffstat (limited to 'deps/v8/src/objects/js-collator.cc')
-rw-r--r-- | deps/v8/src/objects/js-collator.cc | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/deps/v8/src/objects/js-collator.cc b/deps/v8/src/objects/js-collator.cc index 4a1e857403..0413e2acd1 100644 --- a/deps/v8/src/objects/js-collator.cc +++ b/deps/v8/src/objects/js-collator.cc @@ -15,7 +15,9 @@ #include "unicode/locid.h" #include "unicode/strenum.h" #include "unicode/ucol.h" +#include "unicode/udata.h" #include "unicode/uloc.h" +#include "unicode/utypes.h" namespace v8 { namespace internal { @@ -239,10 +241,9 @@ void SetCaseFirstOption(icu::Collator* icu_collator, } // anonymous namespace // static -MaybeHandle<JSCollator> JSCollator::Initialize(Isolate* isolate, - Handle<JSCollator> collator, - Handle<Object> locales, - Handle<Object> options_obj) { +MaybeHandle<JSCollator> JSCollator::New(Isolate* isolate, Handle<Map> map, + Handle<Object> locales, + Handle<Object> options_obj) { // 1. Let requestedLocales be ? CanonicalizeLocaleList(locales). Maybe<std::vector<std::string>> maybe_requested_locales = Intl::CanonicalizeLocaleList(isolate, locales); @@ -465,15 +466,31 @@ MaybeHandle<JSCollator> JSCollator::Initialize(Isolate* isolate, Handle<Managed<icu::Collator>> managed_collator = Managed<icu::Collator>::FromUniquePtr(isolate, 0, std::move(icu_collator)); + + // Now all properties are ready, so we can allocate the result object. + Handle<JSCollator> collator = Handle<JSCollator>::cast( + isolate->factory()->NewFastOrSlowJSObjectFromMap(map)); + DisallowHeapAllocation no_gc; collator->set_icu_collator(*managed_collator); // 29. Return collator. return collator; } +namespace { + +struct CheckColl { + static const char* key() { return nullptr; } +#define U_ICUDATA_COLL U_ICUDATA_NAME U_TREE_SEPARATOR_STRING "coll" + static const char* path() { return U_ICUDATA_COLL; } +#undef U_ICUDATA_COLL +}; + +} // namespace + const std::set<std::string>& JSCollator::GetAvailableLocales() { - static base::LazyInstance<Intl::AvailableLocales<icu::Collator>>::type - available_locales = LAZY_INSTANCE_INITIALIZER; + static base::LazyInstance<Intl::AvailableLocales<icu::Collator, CheckColl>>:: + type available_locales = LAZY_INSTANCE_INITIALIZER; return available_locales.Pointer()->Get(); } |