mirror of
https://github.com/LadybirdBrowser/ladybird
synced 2026-05-08 16:12:23 +02:00
This is a normative change in the ECMA-262 spec. See: https://github.com/tc39/ecma262/commit/de62e8d This did not actually seem to affect our implementation as we were not using generators here to begin with. So this patch is basically just adding spec comments.
39 lines
1.2 KiB
C++
39 lines
1.2 KiB
C++
/*
|
|
* Copyright (c) 2020, Matthew Olsson <mattco@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#include <LibJS/Runtime/ArrayIterator.h>
|
|
#include <LibJS/Runtime/GlobalObject.h>
|
|
|
|
namespace JS {
|
|
|
|
GC_DEFINE_ALLOCATOR(ArrayIterator);
|
|
|
|
// 23.1.5.1 CreateArrayIterator ( array, kind ), https://tc39.es/ecma262/#sec-createarrayiterator
|
|
GC::Ref<ArrayIterator> ArrayIterator::create(Realm& realm, Value array, Object::PropertyKind iteration_kind)
|
|
{
|
|
// 1. Let iterator be OrdinaryObjectCreate(%ArrayIteratorPrototype%, « [[IteratedArrayLike]], [[ArrayLikeNextIndex]], [[ArrayLikeIterationKind]] »).
|
|
// 2. Set iterator.[[IteratedArrayLike]] to array.
|
|
// 3. Set iterator.[[ArrayLikeNextIndex]] to 0.
|
|
// 4. Set iterator.[[ArrayLikeIterationKind]] to kind.
|
|
// 5. Return iterator.
|
|
return realm.create<ArrayIterator>(array, iteration_kind, realm.intrinsics().array_iterator_prototype());
|
|
}
|
|
|
|
ArrayIterator::ArrayIterator(Value array, Object::PropertyKind iteration_kind, Object& prototype)
|
|
: Object(ConstructWithPrototypeTag::Tag, prototype)
|
|
, m_array(array)
|
|
, m_iteration_kind(iteration_kind)
|
|
{
|
|
}
|
|
|
|
void ArrayIterator::visit_edges(Cell::Visitor& visitor)
|
|
{
|
|
Base::visit_edges(visitor);
|
|
visitor.visit(m_array);
|
|
}
|
|
|
|
}
|