1 // Copyright 2020 the V8 project authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 #ifndef V8_OBJECTS_JS_SEGMENT_ITERATOR_H_ 5 #define V8_OBJECTS_JS_SEGMENT_ITERATOR_H_ 6 7 #ifndef V8_INTL_SUPPORT 8 #error Internationalization is expected to be enabled. 9 #endif // V8_INTL_SUPPORT 10 11 #include "src/base/bit-field.h" 12 #include "src/execution/isolate.h" 13 #include "src/heap/factory.h" 14 #include "src/objects/js-segmenter.h" 15 #include "src/objects/managed.h" 16 #include "src/objects/objects.h" 17 #include "unicode/uversion.h" 18 19 // Has to be the last include (doesn't have include guards): 20 #include "src/objects/object-macros.h" 21 22 namespace U_ICU_NAMESPACE { 23 class BreakIterator; 24 class UnicodeString; 25 } // namespace U_ICU_NAMESPACE 26 27 namespace v8 { 28 namespace internal { 29 30 #include "torque-generated/src/objects/js-segment-iterator-tq.inc" 31 32 class JSSegmentIterator 33 : public TorqueGeneratedJSSegmentIterator<JSSegmentIterator, JSObject> { 34 public: 35 // ecma402 #sec-CreateSegmentIterator 36 V8_WARN_UNUSED_RESULT static MaybeHandle<JSSegmentIterator> Create( 37 Isolate* isolate, icu::BreakIterator* icu_break_iterator, 38 JSSegmenter::Granularity granularity); 39 40 // ecma402 #sec-segment-iterator-prototype-next 41 V8_WARN_UNUSED_RESULT static MaybeHandle<JSReceiver> Next( 42 Isolate* isolate, Handle<JSSegmentIterator> segment_iterator_holder); 43 44 Handle<String> GranularityAsString(Isolate* isolate) const; 45 46 // SegmentIterator accessors. 47 DECL_ACCESSORS(icu_break_iterator, Managed<icu::BreakIterator>) 48 DECL_ACCESSORS(unicode_string, Managed<icu::UnicodeString>) 49 50 DECL_PRINTER(JSSegmentIterator) 51 52 inline void set_granularity(JSSegmenter::Granularity granularity); 53 inline JSSegmenter::Granularity granularity() const; 54 55 // Bit positions in |flags|. 56 DEFINE_TORQUE_GENERATED_JS_SEGMENT_ITERATOR_FLAGS() 57 58 STATIC_ASSERT(JSSegmenter::Granularity::GRAPHEME <= GranularityBits::kMax); 59 STATIC_ASSERT(JSSegmenter::Granularity::WORD <= GranularityBits::kMax); 60 STATIC_ASSERT(JSSegmenter::Granularity::SENTENCE <= GranularityBits::kMax); 61 62 TQ_OBJECT_CONSTRUCTORS(JSSegmentIterator) 63 }; 64 65 } // namespace internal 66 } // namespace v8 67 68 #include "src/objects/object-macros-undef.h" 69 70 #endif // V8_OBJECTS_JS_SEGMENT_ITERATOR_H_ 71