1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-23 10:37:41 +00:00

LibJS: Port StringIterator to String

This commit is contained in:
Timothy Flynn 2023-01-14 23:17:49 -05:00 committed by Linus Groh
parent 0d47c4e7a0
commit b6b5ddeb3b
4 changed files with 10 additions and 9 deletions

View file

@ -10,12 +10,12 @@
namespace JS { namespace JS {
NonnullGCPtr<StringIterator> StringIterator::create(Realm& realm, DeprecatedString string) NonnullGCPtr<StringIterator> StringIterator::create(Realm& realm, String string)
{ {
return realm.heap().allocate<StringIterator>(realm, move(string), *realm.intrinsics().string_iterator_prototype()); return realm.heap().allocate<StringIterator>(realm, move(string), *realm.intrinsics().string_iterator_prototype());
} }
StringIterator::StringIterator(DeprecatedString string, Object& prototype) StringIterator::StringIterator(String string, Object& prototype)
: Object(ConstructWithPrototypeTag::Tag, prototype) : Object(ConstructWithPrototypeTag::Tag, prototype)
, m_string(move(string)) , m_string(move(string))
, m_iterator(Utf8View(m_string).begin()) , m_iterator(Utf8View(m_string).begin())

View file

@ -6,6 +6,7 @@
#pragma once #pragma once
#include <AK/String.h>
#include <AK/Utf8View.h> #include <AK/Utf8View.h>
#include <LibJS/Runtime/Object.h> #include <LibJS/Runtime/Object.h>
@ -15,7 +16,7 @@ class StringIterator final : public Object {
JS_OBJECT(StringIterator, Object); JS_OBJECT(StringIterator, Object);
public: public:
static NonnullGCPtr<StringIterator> create(Realm&, DeprecatedString string); static NonnullGCPtr<StringIterator> create(Realm&, String string);
virtual ~StringIterator() override = default; virtual ~StringIterator() override = default;
@ -23,11 +24,11 @@ public:
bool done() const { return m_done; } bool done() const { return m_done; }
private: private:
explicit StringIterator(DeprecatedString string, Object& prototype); explicit StringIterator(String string, Object& prototype);
friend class StringIteratorPrototype; friend class StringIteratorPrototype;
DeprecatedString m_string; String m_string;
Utf8CodePointIterator m_iterator; Utf8CodePointIterator m_iterator;
bool m_done { false }; bool m_done { false };
}; };

View file

@ -4,12 +4,12 @@
* SPDX-License-Identifier: BSD-2-Clause * SPDX-License-Identifier: BSD-2-Clause
*/ */
#include <AK/StringBuilder.h>
#include <AK/TypeCasts.h> #include <AK/TypeCasts.h>
#include <LibJS/Runtime/Error.h> #include <LibJS/Runtime/Error.h>
#include <LibJS/Runtime/GlobalObject.h> #include <LibJS/Runtime/GlobalObject.h>
#include <LibJS/Runtime/IteratorOperations.h> #include <LibJS/Runtime/IteratorOperations.h>
#include <LibJS/Runtime/StringIteratorPrototype.h> #include <LibJS/Runtime/StringIteratorPrototype.h>
#include <LibJS/Runtime/ThrowableStringBuilder.h>
namespace JS { namespace JS {
@ -42,11 +42,11 @@ JS_DEFINE_NATIVE_FUNCTION(StringIteratorPrototype::next)
return create_iterator_result_object(vm, js_undefined(), true); return create_iterator_result_object(vm, js_undefined(), true);
} }
StringBuilder builder; ThrowableStringBuilder builder(vm);
builder.append_code_point(*utf8_iterator); builder.append_code_point(*utf8_iterator);
++utf8_iterator; ++utf8_iterator;
return create_iterator_result_object(vm, PrimitiveString::create(vm, builder.to_deprecated_string()), false); return create_iterator_result_object(vm, PrimitiveString::create(vm, TRY(builder.to_string())), false);
} }
} }

View file

@ -1074,7 +1074,7 @@ JS_DEFINE_NATIVE_FUNCTION(StringPrototype::symbol_iterator)
auto& realm = *vm.current_realm(); auto& realm = *vm.current_realm();
auto this_object = TRY(require_object_coercible(vm, vm.this_value())); auto this_object = TRY(require_object_coercible(vm, vm.this_value()));
auto string = TRY(this_object.to_deprecated_string(vm)); auto string = TRY(this_object.to_string(vm));
return StringIterator::create(realm, string); return StringIterator::create(realm, string);
} }