/* * Copyright (c) 2022, Linus Groh * Copyright (c) 2023, Tim Flynn * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include namespace JS { // 7.4.1 Iterator Records, https://tc39.es/ecma262/#sec-iterator-records struct IteratorRecord { GCPtr iterator; // [[Iterator]] Value next_method; // [[NextMethod]] bool done { false }; // [[Done]] }; class Iterator : public Object { JS_OBJECT(Iterator, Object); public: static ThrowCompletionOr> create(Realm&, Object& prototype, IteratorRecord iterated); IteratorRecord const& iterated() const { return m_iterated; } private: Iterator(Object& prototype, IteratorRecord iterated); explicit Iterator(Object& prototype); IteratorRecord m_iterated; // [[Iterated]] }; ThrowCompletionOr get_iterator_direct(VM&, Object&); ThrowCompletionOr get_iterator_flattenable(VM&, Value); }