diff options
Diffstat (limited to 'deps/v8/src/objects/js-collator.h')
-rw-r--r-- | deps/v8/src/objects/js-collator.h | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/deps/v8/src/objects/js-collator.h b/deps/v8/src/objects/js-collator.h new file mode 100644 index 00000000000..b2751a446e3 --- /dev/null +++ b/deps/v8/src/objects/js-collator.h @@ -0,0 +1,92 @@ +// Copyright 2018 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef V8_INTL_SUPPORT +#error Internationalization is expected to be enabled. +#endif // V8_INTL_SUPPORT + +#ifndef V8_OBJECTS_JS_COLLATOR_H_ +#define V8_OBJECTS_JS_COLLATOR_H_ + +#include "src/heap/factory.h" +#include "src/isolate.h" +#include "src/objects.h" +#include "src/objects/intl-objects.h" +#include "src/objects/managed.h" + +// Has to be the last include (doesn't have include guards): +#include "src/objects/object-macros.h" + +namespace v8 { +namespace internal { + +class JSCollator : public JSObject { + public: + // ecma402/#sec-initializecollator + V8_WARN_UNUSED_RESULT static MaybeHandle<JSCollator> InitializeCollator( + Isolate* isolate, Handle<JSCollator> collator, Handle<Object> locales, + Handle<Object> options); + + // ecma402/#sec-intl.collator.prototype.resolvedoptions + static Handle<JSObject> ResolvedOptions(Isolate* isolate, + Handle<JSCollator> collator); + + DECL_CAST(JSCollator) + DECL_PRINTER(JSCollator) + DECL_VERIFIER(JSCollator) + + // [[Usage]] is one of the values "sort" or "search", identifying + // the collator usage. + enum class Usage { + SORT, + SEARCH, + + COUNT + }; + inline void set_usage(Usage usage); + inline Usage usage() const; + static const char* UsageToString(Usage usage); + +// Layout description. +#define JS_COLLATOR_FIELDS(V) \ + V(kICUCollatorOffset, kPointerSize) \ + V(kFlagsOffset, kPointerSize) \ + V(kBoundCompareOffset, kPointerSize) \ + /* Total size. */ \ + V(kSize, 0) + + DEFINE_FIELD_OFFSET_CONSTANTS(JSObject::kHeaderSize, JS_COLLATOR_FIELDS) +#undef JS_COLLATOR_FIELDS + + // ContextSlot defines the context structure for the bound + // Collator.prototype.compare function. + enum ContextSlot { + // The collator instance that the function holding this context is bound to. + kCollator = Context::MIN_CONTEXT_SLOTS, + kLength + }; + +// Bit positions in |flags|. +#define FLAGS_BIT_FIELDS(V, _) V(UsageBits, Usage, 1, _) + + DEFINE_BIT_FIELDS(FLAGS_BIT_FIELDS) +#undef FLAGS_BIT_FIELDS + + STATIC_ASSERT(Usage::SORT <= UsageBits::kMax); + STATIC_ASSERT(Usage::SEARCH <= UsageBits::kMax); + + DECL_ACCESSORS(icu_collator, Managed<icu::Collator>) + DECL_ACCESSORS(bound_compare, Object); + DECL_INT_ACCESSORS(flags) + + private: + DISALLOW_IMPLICIT_CONSTRUCTORS(JSCollator); +}; + +} // namespace internal +} // namespace v8 + +#include "src/objects/object-macros-undef.h" + +#endif // V8_OBJECTS_JS_COLLATOR_H_ |