mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 17:17:44 +00:00
LibJS: Implement Intl %SegmentsPrototype%[@@iterator]
This commit is contained in:
parent
6c26a02aa8
commit
4ba4e4c777
3 changed files with 34 additions and 0 deletions
|
@ -5,6 +5,7 @@
|
|||
*/
|
||||
|
||||
#include <LibJS/Runtime/GlobalObject.h>
|
||||
#include <LibJS/Runtime/Intl/SegmentIterator.h>
|
||||
#include <LibJS/Runtime/Intl/Segments.h>
|
||||
#include <LibJS/Runtime/Intl/SegmentsPrototype.h>
|
||||
|
||||
|
@ -19,6 +20,28 @@ SegmentsPrototype::SegmentsPrototype(GlobalObject& global_object)
|
|||
void SegmentsPrototype::initialize(GlobalObject& global_object)
|
||||
{
|
||||
Object::initialize(global_object);
|
||||
|
||||
auto& vm = this->vm();
|
||||
|
||||
u8 attr = Attribute::Writable | Attribute::Configurable;
|
||||
define_native_function(*vm.well_known_symbol_iterator(), symbol_iterator, 0, attr);
|
||||
}
|
||||
|
||||
// 18.5.2.2 %SegmentsPrototype% [ @@iterator ] ( ), https://tc39.es/ecma402/#sec-%segmentsprototype%-@@iterator
|
||||
JS_DEFINE_NATIVE_FUNCTION(SegmentsPrototype::symbol_iterator)
|
||||
{
|
||||
// 1. Let segments be the this value.
|
||||
// 2. Perform ? RequireInternalSlot(segments, [[SegmentsSegmenter]]).
|
||||
auto* segments = TRY(typed_this_object(global_object));
|
||||
|
||||
// 3. Let segmenter be segments.[[SegmentsSegmenter]].
|
||||
auto& segmenter = segments->segments_segmenter();
|
||||
|
||||
// 4. Let string be segments.[[SegmentsString]].
|
||||
auto& string = segments->segments_string();
|
||||
|
||||
// 5. Return ! CreateSegmentIterator(segmenter, string).
|
||||
return SegmentIterator::create(global_object, segmenter, string);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -18,6 +18,9 @@ public:
|
|||
explicit SegmentsPrototype(GlobalObject&);
|
||||
virtual void initialize(GlobalObject&) override;
|
||||
virtual ~SegmentsPrototype() override = default;
|
||||
|
||||
private:
|
||||
JS_DECLARE_NATIVE_FUNCTION(symbol_iterator);
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -9,4 +9,12 @@ describe("correct behavior", () => {
|
|||
Object.getPrototypeOf(segmenter.segment("friends"))
|
||||
);
|
||||
});
|
||||
|
||||
test("returns segments object segment iterator", () => {
|
||||
const segmenter = new Intl.Segmenter();
|
||||
const segments = segmenter.segment("hello friends!");
|
||||
expect(Object.getPrototypeOf(segments[Symbol.iterator]())[Symbol.toStringTag]).toBe(
|
||||
"Segmenter String Iterator"
|
||||
);
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue