aboutsummaryrefslogtreecommitdiff
path: root/deps/v8/src/objects/js-collator.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/objects/js-collator.cc')
-rw-r--r--deps/v8/src/objects/js-collator.cc29
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();
}