summaryrefslogtreecommitdiff
path: root/deps/v8/src/objects/js-segment-iterator.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/objects/js-segment-iterator.cc')
-rw-r--r--deps/v8/src/objects/js-segment-iterator.cc21
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