LibJS: Convert StringIterator.prototype to be a PrototypeObject

This commit is contained in:
Timothy Flynn 2021-09-11 15:44:35 -04:00 committed by Andreas Kling
parent f195cb41a8
commit be0880fb2c
Notes: sideshowbarker 2024-07-18 04:13:31 +09:00
2 changed files with 10 additions and 13 deletions

View File

@ -9,13 +9,12 @@
#include <LibJS/Runtime/Error.h>
#include <LibJS/Runtime/GlobalObject.h>
#include <LibJS/Runtime/IteratorOperations.h>
#include <LibJS/Runtime/StringIterator.h>
#include <LibJS/Runtime/StringIteratorPrototype.h>
namespace JS {
StringIteratorPrototype::StringIteratorPrototype(GlobalObject& global_object)
: Object(*global_object.iterator_prototype())
: PrototypeObject(*global_object.iterator_prototype())
{
}
@ -36,21 +35,17 @@ StringIteratorPrototype::~StringIteratorPrototype()
// 22.1.5.1.1 %StringIteratorPrototype%.next ( ), https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next
JS_DEFINE_NATIVE_FUNCTION(StringIteratorPrototype::next)
{
auto this_value = vm.this_value(global_object);
if (!this_value.is_object() || !is<StringIterator>(this_value.as_object())) {
vm.throw_exception<TypeError>(global_object, ErrorType::NotAnObjectOfType, "String Iterator");
auto* iterator = typed_this_value(global_object);
if (vm.exception())
return {};
}
auto& this_object = this_value.as_object();
auto& iterator = static_cast<StringIterator&>(this_object);
if (iterator.done())
if (iterator->done())
return create_iterator_result_object(global_object, js_undefined(), true);
auto& utf8_iterator = iterator.iterator();
auto& utf8_iterator = iterator->iterator();
if (utf8_iterator.done()) {
iterator.m_done = true;
iterator->m_done = true;
return create_iterator_result_object(global_object, js_undefined(), true);
}

View File

@ -7,11 +7,13 @@
#pragma once
#include <LibJS/Runtime/Object.h>
#include <LibJS/Runtime/PrototypeObject.h>
#include <LibJS/Runtime/StringIterator.h>
namespace JS {
class StringIteratorPrototype final : public Object {
JS_OBJECT(StringIteratorPrototype, Object)
class StringIteratorPrototype final : public PrototypeObject<StringIteratorPrototype, StringIterator> {
JS_PROTOTYPE_OBJECT(StringIteratorPrototype, StringIterator, StringIterator);
public:
StringIteratorPrototype(GlobalObject&);