| 
									
										
										
										
											2022-01-30 02:18:47 +02:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * Copyright (c) 2022, Idan Horowitz <idan.horowitz@serenityos.org> | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * SPDX-License-Identifier: BSD-2-Clause | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <LibJS/Runtime/GlobalObject.h>
 | 
					
						
							|  |  |  | #include <LibJS/Runtime/Intl/SegmentIterator.h>
 | 
					
						
							| 
									
										
										
										
											2022-01-30 21:34:41 +02:00
										 |  |  | #include <LibJS/Runtime/Intl/Segments.h>
 | 
					
						
							| 
									
										
										
										
											2022-01-30 02:18:47 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | namespace JS::Intl { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // 18.6.1 CreateSegmentIterator ( segmenter, string ), https://tc39.es/ecma402/#sec-createsegmentsobject
 | 
					
						
							| 
									
										
										
										
											2022-01-30 21:34:41 +02:00
										 |  |  | SegmentIterator* SegmentIterator::create(GlobalObject& global_object, Segmenter& segmenter, Utf16View const& string, Segments const& segments) | 
					
						
							| 
									
										
										
										
											2022-01-30 02:18:47 +02:00
										 |  |  | { | 
					
						
							|  |  |  |     // 1. Let internalSlotsList be « [[IteratingSegmenter]], [[IteratedString]], [[IteratedStringNextSegmentCodeUnitIndex]] ».
 | 
					
						
							| 
									
										
										
										
											2022-05-02 20:54:39 +02:00
										 |  |  |     // 2. Let iterator be OrdinaryObjectCreate(%SegmentIteratorPrototype%, internalSlotsList).
 | 
					
						
							| 
									
										
										
										
											2022-01-30 02:18:47 +02:00
										 |  |  |     // 3. Set iterator.[[IteratingSegmenter]] to segmenter.
 | 
					
						
							|  |  |  |     // 4. Set iterator.[[IteratedString]] to string.
 | 
					
						
							|  |  |  |     // 5. Set iterator.[[IteratedStringNextSegmentCodeUnitIndex]] to 0.
 | 
					
						
							|  |  |  |     // 6. Return iterator.
 | 
					
						
							| 
									
										
										
										
											2022-01-30 21:34:41 +02:00
										 |  |  |     return global_object.heap().allocate<SegmentIterator>(global_object, global_object, segmenter, move(string), segments); | 
					
						
							| 
									
										
										
										
											2022-01-30 02:18:47 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // 18.6 Segment Iterator Objects, https://tc39.es/ecma402/#sec-segment-iterator-objects
 | 
					
						
							| 
									
										
										
										
											2022-01-30 21:34:41 +02:00
										 |  |  | SegmentIterator::SegmentIterator(GlobalObject& global_object, Segmenter& segmenter, Utf16View const& string, Segments const& segments) | 
					
						
							| 
									
										
										
										
											2022-01-30 02:18:47 +02:00
										 |  |  |     : Object(*global_object.intl_segment_iterator_prototype()) | 
					
						
							|  |  |  |     , m_iterating_segmenter(segmenter) | 
					
						
							| 
									
										
										
										
											2022-01-31 18:41:44 +02:00
										 |  |  |     , m_iterated_string(string) | 
					
						
							| 
									
										
										
										
											2022-01-30 21:34:41 +02:00
										 |  |  |     , m_segments(segments) | 
					
						
							| 
									
										
										
										
											2022-01-30 02:18:47 +02:00
										 |  |  | { | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void SegmentIterator::visit_edges(Cell::Visitor& visitor) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     Base::visit_edges(visitor); | 
					
						
							|  |  |  |     visitor.visit(&m_iterating_segmenter); | 
					
						
							| 
									
										
										
										
											2022-01-30 21:34:41 +02:00
										 |  |  |     visitor.visit(&m_segments); | 
					
						
							| 
									
										
										
										
											2022-01-30 02:18:47 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |