diff options
Diffstat (limited to 'deps/v8/src/objects/js-segment-iterator.cc')
-rw-r--r-- | deps/v8/src/objects/js-segment-iterator.cc | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/deps/v8/src/objects/js-segment-iterator.cc b/deps/v8/src/objects/js-segment-iterator.cc index 3d2b19ca5c..509db37d44 100644 --- a/deps/v8/src/objects/js-segment-iterator.cc +++ b/deps/v8/src/objects/js-segment-iterator.cc @@ -37,9 +37,8 @@ Handle<String> JSSegmentIterator::GranularityAsString() const { return GetReadOnlyRoots().word_string_handle(); case JSSegmenter::Granularity::SENTENCE: return GetReadOnlyRoots().sentence_string_handle(); - case JSSegmenter::Granularity::COUNT: - UNREACHABLE(); } + UNREACHABLE(); } MaybeHandle<JSSegmentIterator> JSSegmentIterator::Create( @@ -49,22 +48,25 @@ MaybeHandle<JSSegmentIterator> JSSegmentIterator::Create( // 1. Let iterator be ObjectCreate(%SegmentIteratorPrototype%). Handle<Map> map = Handle<Map>( isolate->native_context()->intl_segment_iterator_map(), isolate); - Handle<JSObject> result = isolate->factory()->NewJSObjectFromMap(map); + Handle<Managed<icu::BreakIterator>> managed_break_iterator = + Managed<icu::BreakIterator>::FromRawPtr(isolate, 0, break_iterator); + Handle<Managed<icu::UnicodeString>> unicode_string = + Intl::SetTextToBreakIterator(isolate, text, break_iterator); + + // Now all properties are ready, so we can allocate the result object. + Handle<JSObject> result = isolate->factory()->NewJSObjectFromMap(map); + DisallowHeapAllocation no_gc; Handle<JSSegmentIterator> segment_iterator = Handle<JSSegmentIterator>::cast(result); segment_iterator->set_flags(0); segment_iterator->set_granularity(granularity); // 2. Let iterator.[[SegmentIteratorSegmenter]] be segmenter. - Handle<Managed<icu::BreakIterator>> managed_break_iterator = - Managed<icu::BreakIterator>::FromRawPtr(isolate, 0, break_iterator); segment_iterator->set_icu_break_iterator(*managed_break_iterator); // 3. Let iterator.[[SegmentIteratorString]] be string. - Managed<icu::UnicodeString> unicode_string = - Intl::SetTextToBreakIterator(isolate, text, break_iterator); - segment_iterator->set_unicode_string(unicode_string); + segment_iterator->set_unicode_string(*unicode_string); // 4. Let iterator.[[SegmentIteratorIndex]] be 0. // step 4 is stored inside break_iterator. @@ -119,9 +121,8 @@ Handle<Object> JSSegmentIterator::BreakType() const { return GetReadOnlyRoots().sep_string_handle(); } return GetReadOnlyRoots().undefined_value_handle(); - case JSSegmenter::Granularity::COUNT: - UNREACHABLE(); } + UNREACHABLE(); } // ecma402 #sec-segment-iterator-prototype-index |