1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 02:07:35 +00:00

LibJS: Rename JS::Iterator to JS::IteratorRecord

This is in preparation for an upcoming implementation of the Iterator
Helpers proposal. That proposal will require a JS::Object type named
"Iterator", so this rename is to avoid conflicts.
This commit is contained in:
Timothy Flynn 2023-06-23 15:35:19 -04:00 committed by Andreas Kling
parent cd2a6767bc
commit 4977000fa0
12 changed files with 36 additions and 36 deletions

View file

@ -263,7 +263,7 @@ void ImportCall::replace_references_impl(Register from, Register to)
// FIXME: Since the accumulator is a Value, we store an object there and have to convert back and forth between that an Iterator records. Not great. // FIXME: Since the accumulator is a Value, we store an object there and have to convert back and forth between that an Iterator records. Not great.
// Make sure to put this into the accumulator before the iterator object disappears from the stack to prevent the members from being GC'd. // Make sure to put this into the accumulator before the iterator object disappears from the stack to prevent the members from being GC'd.
static Object* iterator_to_object(VM& vm, Iterator iterator) static Object* iterator_to_object(VM& vm, IteratorRecord iterator)
{ {
auto& realm = *vm.current_realm(); auto& realm = *vm.current_realm();
auto object = Object::create(realm, nullptr); auto object = Object::create(realm, nullptr);
@ -273,9 +273,9 @@ static Object* iterator_to_object(VM& vm, Iterator iterator)
return object; return object;
} }
static Iterator object_to_iterator(VM& vm, Object& object) static IteratorRecord object_to_iterator(VM& vm, Object& object)
{ {
return Iterator { return IteratorRecord {
.iterator = &MUST(object.get(vm.names.iterator)).as_object(), .iterator = &MUST(object.get(vm.names.iterator)).as_object(),
.next_method = MUST(object.get(vm.names.next)), .next_method = MUST(object.get(vm.names.next)),
.done = MUST(object.get(vm.names.done)).as_bool() .done = MUST(object.get(vm.names.done)).as_bool()
@ -1052,7 +1052,7 @@ ThrowCompletionOr<void> GetObjectPropertyIterator::execute_impl(Bytecode::Interp
properties.set(TRY(PropertyKey::from_value(vm, key))); properties.set(TRY(PropertyKey::from_value(vm, key)));
} }
} }
Iterator iterator { IteratorRecord iterator {
.iterator = object, .iterator = object,
.next_method = NativeFunction::create( .next_method = NativeFunction::create(
interpreter.realm(), interpreter.realm(),

View file

@ -11,12 +11,12 @@
namespace JS { namespace JS {
NonnullGCPtr<AsyncFromSyncIterator> AsyncFromSyncIterator::create(Realm& realm, Iterator sync_iterator_record) NonnullGCPtr<AsyncFromSyncIterator> AsyncFromSyncIterator::create(Realm& realm, IteratorRecord sync_iterator_record)
{ {
return realm.heap().allocate<AsyncFromSyncIterator>(realm, realm, sync_iterator_record).release_allocated_value_but_fixme_should_propagate_errors(); return realm.heap().allocate<AsyncFromSyncIterator>(realm, realm, sync_iterator_record).release_allocated_value_but_fixme_should_propagate_errors();
} }
AsyncFromSyncIterator::AsyncFromSyncIterator(Realm& realm, Iterator sync_iterator_record) AsyncFromSyncIterator::AsyncFromSyncIterator(Realm& realm, IteratorRecord sync_iterator_record)
: Object(ConstructWithPrototypeTag::Tag, realm.intrinsics().async_from_sync_iterator_prototype()) : Object(ConstructWithPrototypeTag::Tag, realm.intrinsics().async_from_sync_iterator_prototype())
, m_sync_iterator_record(sync_iterator_record) , m_sync_iterator_record(sync_iterator_record)
{ {

View file

@ -17,20 +17,20 @@ class AsyncFromSyncIterator final : public Object {
JS_OBJECT(AsyncFromSyncIterator, Object); JS_OBJECT(AsyncFromSyncIterator, Object);
public: public:
static NonnullGCPtr<AsyncFromSyncIterator> create(Realm&, Iterator sync_iterator_record); static NonnullGCPtr<AsyncFromSyncIterator> create(Realm&, IteratorRecord sync_iterator_record);
virtual ThrowCompletionOr<void> initialize(Realm&) override; virtual ThrowCompletionOr<void> initialize(Realm&) override;
virtual ~AsyncFromSyncIterator() override = default; virtual ~AsyncFromSyncIterator() override = default;
void visit_edges(Visitor& visitor) override; void visit_edges(Visitor& visitor) override;
Iterator& sync_iterator_record() { return m_sync_iterator_record; } IteratorRecord& sync_iterator_record() { return m_sync_iterator_record; }
Iterator const& sync_iterator_record() const { return m_sync_iterator_record; } IteratorRecord const& sync_iterator_record() const { return m_sync_iterator_record; }
private: private:
AsyncFromSyncIterator(Realm&, Iterator sync_iterator_record); AsyncFromSyncIterator(Realm&, IteratorRecord sync_iterator_record);
Iterator m_sync_iterator_record; // [[SyncIteratorRecord]] IteratorRecord m_sync_iterator_record; // [[SyncIteratorRecord]]
}; };
} }

View file

@ -199,7 +199,7 @@ JS_DEFINE_NATIVE_FUNCTION(AsyncFromSyncIteratorPrototype::throw_)
} }
// 27.1.4.1 CreateAsyncFromSyncIterator ( syncIteratorRecord ), https://tc39.es/ecma262/#sec-createasyncfromsynciterator // 27.1.4.1 CreateAsyncFromSyncIterator ( syncIteratorRecord ), https://tc39.es/ecma262/#sec-createasyncfromsynciterator
Iterator create_async_from_sync_iterator(VM& vm, Iterator sync_iterator_record) IteratorRecord create_async_from_sync_iterator(VM& vm, IteratorRecord sync_iterator_record)
{ {
auto& realm = *vm.current_realm(); auto& realm = *vm.current_realm();
@ -211,7 +211,7 @@ Iterator create_async_from_sync_iterator(VM& vm, Iterator sync_iterator_record)
auto next_method = MUST(async_iterator->get(vm.names.next)); auto next_method = MUST(async_iterator->get(vm.names.next));
// 4. Let iteratorRecord be the Iterator Record { [[Iterator]]: asyncIterator, [[NextMethod]]: nextMethod, [[Done]]: false }. // 4. Let iteratorRecord be the Iterator Record { [[Iterator]]: asyncIterator, [[NextMethod]]: nextMethod, [[Done]]: false }.
auto iterator_record = Iterator { .iterator = async_iterator, .next_method = next_method, .done = false }; auto iterator_record = IteratorRecord { .iterator = async_iterator, .next_method = next_method, .done = false };
// 5. Return iteratorRecord. // 5. Return iteratorRecord.
return iterator_record; return iterator_record;

View file

@ -30,6 +30,6 @@ private:
JS_DECLARE_NATIVE_FUNCTION(throw_); JS_DECLARE_NATIVE_FUNCTION(throw_);
}; };
Iterator create_async_from_sync_iterator(VM&, Iterator sync_iterator); IteratorRecord create_async_from_sync_iterator(VM&, IteratorRecord sync_iterator);
} }

View file

@ -12,7 +12,7 @@
namespace JS { namespace JS {
// 7.4.1 Iterator Records, https://tc39.es/ecma262/#sec-iterator-records // 7.4.1 Iterator Records, https://tc39.es/ecma262/#sec-iterator-records
struct Iterator { struct IteratorRecord {
GCPtr<Object> iterator; // [[Iterator]] GCPtr<Object> iterator; // [[Iterator]]
Value next_method; // [[NextMethod]] Value next_method; // [[NextMethod]]
bool done { false }; // [[Done]] bool done { false }; // [[Done]]

View file

@ -15,7 +15,7 @@
namespace JS { namespace JS {
// 7.4.2 GetIterator ( obj [ , hint [ , method ] ] ), https://tc39.es/ecma262/#sec-getiterator // 7.4.2 GetIterator ( obj [ , hint [ , method ] ] ), https://tc39.es/ecma262/#sec-getiterator
ThrowCompletionOr<Iterator> get_iterator(VM& vm, Value value, IteratorHint hint, Optional<Value> method) ThrowCompletionOr<IteratorRecord> get_iterator(VM& vm, Value value, IteratorHint hint, Optional<Value> method)
{ {
// 1. If hint is not present, set hint to sync. // 1. If hint is not present, set hint to sync.
@ -61,14 +61,14 @@ ThrowCompletionOr<Iterator> get_iterator(VM& vm, Value value, IteratorHint hint,
auto next_method = TRY(iterator.get(vm, vm.names.next)); auto next_method = TRY(iterator.get(vm, vm.names.next));
// 6. Let iteratorRecord be the Iterator Record { [[Iterator]]: iterator, [[NextMethod]]: nextMethod, [[Done]]: false }. // 6. Let iteratorRecord be the Iterator Record { [[Iterator]]: iterator, [[NextMethod]]: nextMethod, [[Done]]: false }.
auto iterator_record = Iterator { .iterator = &iterator.as_object(), .next_method = next_method, .done = false }; auto iterator_record = IteratorRecord { .iterator = &iterator.as_object(), .next_method = next_method, .done = false };
// 7. Return iteratorRecord. // 7. Return iteratorRecord.
return iterator_record; return iterator_record;
} }
// 7.4.3 IteratorNext ( iteratorRecord [ , value ] ), https://tc39.es/ecma262/#sec-iteratornext // 7.4.3 IteratorNext ( iteratorRecord [ , value ] ), https://tc39.es/ecma262/#sec-iteratornext
ThrowCompletionOr<NonnullGCPtr<Object>> iterator_next(VM& vm, Iterator const& iterator_record, Optional<Value> value) ThrowCompletionOr<NonnullGCPtr<Object>> iterator_next(VM& vm, IteratorRecord const& iterator_record, Optional<Value> value)
{ {
Value result; Value result;
@ -104,7 +104,7 @@ ThrowCompletionOr<Value> iterator_value(VM& vm, Object& iterator_result)
} }
// 7.4.6 IteratorStep ( iteratorRecord ), https://tc39.es/ecma262/#sec-iteratorstep // 7.4.6 IteratorStep ( iteratorRecord ), https://tc39.es/ecma262/#sec-iteratorstep
ThrowCompletionOr<GCPtr<Object>> iterator_step(VM& vm, Iterator const& iterator_record) ThrowCompletionOr<GCPtr<Object>> iterator_step(VM& vm, IteratorRecord const& iterator_record)
{ {
// 1. Let result be ? IteratorNext(iteratorRecord). // 1. Let result be ? IteratorNext(iteratorRecord).
auto result = TRY(iterator_next(vm, iterator_record)); auto result = TRY(iterator_next(vm, iterator_record));
@ -123,7 +123,7 @@ ThrowCompletionOr<GCPtr<Object>> iterator_step(VM& vm, Iterator const& iterator_
// 7.4.7 IteratorClose ( iteratorRecord, completion ), https://tc39.es/ecma262/#sec-iteratorclose // 7.4.7 IteratorClose ( iteratorRecord, completion ), https://tc39.es/ecma262/#sec-iteratorclose
// 7.4.9 AsyncIteratorClose ( iteratorRecord, completion ), https://tc39.es/ecma262/#sec-asynciteratorclose // 7.4.9 AsyncIteratorClose ( iteratorRecord, completion ), https://tc39.es/ecma262/#sec-asynciteratorclose
// NOTE: These only differ in that async awaits the inner value after the call. // NOTE: These only differ in that async awaits the inner value after the call.
static Completion iterator_close_impl(VM& vm, Iterator const& iterator_record, Completion completion, IteratorHint iterator_hint) static Completion iterator_close_impl(VM& vm, IteratorRecord const& iterator_record, Completion completion, IteratorHint iterator_hint)
{ {
// 1. Assert: Type(iteratorRecord.[[Iterator]]) is Object. // 1. Assert: Type(iteratorRecord.[[Iterator]]) is Object.
@ -172,13 +172,13 @@ static Completion iterator_close_impl(VM& vm, Iterator const& iterator_record, C
} }
// 7.4.7 IteratorClose ( iteratorRecord, completion ), https://tc39.es/ecma262/#sec-iteratorclose // 7.4.7 IteratorClose ( iteratorRecord, completion ), https://tc39.es/ecma262/#sec-iteratorclose
Completion iterator_close(VM& vm, Iterator const& iterator_record, Completion completion) Completion iterator_close(VM& vm, IteratorRecord const& iterator_record, Completion completion)
{ {
return iterator_close_impl(vm, iterator_record, move(completion), IteratorHint::Sync); return iterator_close_impl(vm, iterator_record, move(completion), IteratorHint::Sync);
} }
// 7.4.9 AsyncIteratorClose ( iteratorRecord, completion ), https://tc39.es/ecma262/#sec-asynciteratorclose // 7.4.9 AsyncIteratorClose ( iteratorRecord, completion ), https://tc39.es/ecma262/#sec-asynciteratorclose
Completion async_iterator_close(VM& vm, Iterator const& iterator_record, Completion completion) Completion async_iterator_close(VM& vm, IteratorRecord const& iterator_record, Completion completion)
{ {
return iterator_close_impl(vm, iterator_record, move(completion), IteratorHint::Async); return iterator_close_impl(vm, iterator_record, move(completion), IteratorHint::Async);
} }

View file

@ -22,13 +22,13 @@ enum class IteratorHint {
Async, Async,
}; };
ThrowCompletionOr<Iterator> get_iterator(VM&, Value, IteratorHint = IteratorHint::Sync, Optional<Value> method = {}); ThrowCompletionOr<IteratorRecord> get_iterator(VM&, Value, IteratorHint = IteratorHint::Sync, Optional<Value> method = {});
ThrowCompletionOr<NonnullGCPtr<Object>> iterator_next(VM&, Iterator const&, Optional<Value> = {}); ThrowCompletionOr<NonnullGCPtr<Object>> iterator_next(VM&, IteratorRecord const&, Optional<Value> = {});
ThrowCompletionOr<GCPtr<Object>> iterator_step(VM&, Iterator const&); ThrowCompletionOr<GCPtr<Object>> iterator_step(VM&, IteratorRecord const&);
ThrowCompletionOr<bool> iterator_complete(VM&, Object& iterator_result); ThrowCompletionOr<bool> iterator_complete(VM&, Object& iterator_result);
ThrowCompletionOr<Value> iterator_value(VM&, Object& iterator_result); ThrowCompletionOr<Value> iterator_value(VM&, Object& iterator_result);
Completion iterator_close(VM&, Iterator const&, Completion); Completion iterator_close(VM&, IteratorRecord const&, Completion);
Completion async_iterator_close(VM&, Iterator const&, Completion); Completion async_iterator_close(VM&, IteratorRecord const&, Completion);
NonnullGCPtr<Object> create_iterator_result_object(VM&, Value, bool done); NonnullGCPtr<Object> create_iterator_result_object(VM&, Value, bool done);
ThrowCompletionOr<MarkedVector<Value>> iterable_to_list(VM&, Value iterable, Optional<Value> method = {}); ThrowCompletionOr<MarkedVector<Value>> iterable_to_list(VM&, Value iterable, Optional<Value> method = {});

View file

@ -39,7 +39,7 @@ static ThrowCompletionOr<Value> get_promise_resolve(VM& vm, Value constructor)
using EndOfElementsCallback = Function<ThrowCompletionOr<Value>(PromiseValueList&)>; using EndOfElementsCallback = Function<ThrowCompletionOr<Value>(PromiseValueList&)>;
using InvokeElementFunctionCallback = Function<ThrowCompletionOr<Value>(PromiseValueList&, RemainingElements&, Value, size_t)>; using InvokeElementFunctionCallback = Function<ThrowCompletionOr<Value>(PromiseValueList&, RemainingElements&, Value, size_t)>;
static ThrowCompletionOr<Value> perform_promise_common(VM& vm, Iterator& iterator_record, Value constructor, PromiseCapability const& result_capability, Value promise_resolve, EndOfElementsCallback end_of_list, InvokeElementFunctionCallback invoke_element_function) static ThrowCompletionOr<Value> perform_promise_common(VM& vm, IteratorRecord& iterator_record, Value constructor, PromiseCapability const& result_capability, Value promise_resolve, EndOfElementsCallback end_of_list, InvokeElementFunctionCallback invoke_element_function)
{ {
VERIFY(constructor.is_constructor()); VERIFY(constructor.is_constructor());
VERIFY(promise_resolve.is_function()); VERIFY(promise_resolve.is_function());
@ -113,7 +113,7 @@ static ThrowCompletionOr<Value> perform_promise_common(VM& vm, Iterator& iterato
} }
// 27.2.4.1.2 PerformPromiseAll ( iteratorRecord, constructor, resultCapability, promiseResolve ), https://tc39.es/ecma262/#sec-performpromiseall // 27.2.4.1.2 PerformPromiseAll ( iteratorRecord, constructor, resultCapability, promiseResolve ), https://tc39.es/ecma262/#sec-performpromiseall
static ThrowCompletionOr<Value> perform_promise_all(VM& vm, Iterator& iterator_record, Value constructor, PromiseCapability const& result_capability, Value promise_resolve) static ThrowCompletionOr<Value> perform_promise_all(VM& vm, IteratorRecord& iterator_record, Value constructor, PromiseCapability const& result_capability, Value promise_resolve)
{ {
auto& realm = *vm.current_realm(); auto& realm = *vm.current_realm();
@ -147,7 +147,7 @@ static ThrowCompletionOr<Value> perform_promise_all(VM& vm, Iterator& iterator_r
} }
// 27.2.4.2.1 PerformPromiseAllSettled ( iteratorRecord, constructor, resultCapability, promiseResolve ), https://tc39.es/ecma262/#sec-performpromiseallsettled // 27.2.4.2.1 PerformPromiseAllSettled ( iteratorRecord, constructor, resultCapability, promiseResolve ), https://tc39.es/ecma262/#sec-performpromiseallsettled
static ThrowCompletionOr<Value> perform_promise_all_settled(VM& vm, Iterator& iterator_record, Value constructor, PromiseCapability const& result_capability, Value promise_resolve) static ThrowCompletionOr<Value> perform_promise_all_settled(VM& vm, IteratorRecord& iterator_record, Value constructor, PromiseCapability const& result_capability, Value promise_resolve)
{ {
auto& realm = *vm.current_realm(); auto& realm = *vm.current_realm();
@ -190,7 +190,7 @@ static ThrowCompletionOr<Value> perform_promise_all_settled(VM& vm, Iterator& it
} }
// 27.2.4.3.1 PerformPromiseAny ( iteratorRecord, constructor, resultCapability, promiseResolve ), https://tc39.es/ecma262/#sec-performpromiseany // 27.2.4.3.1 PerformPromiseAny ( iteratorRecord, constructor, resultCapability, promiseResolve ), https://tc39.es/ecma262/#sec-performpromiseany
static ThrowCompletionOr<Value> perform_promise_any(VM& vm, Iterator& iterator_record, Value constructor, PromiseCapability& result_capability, Value promise_resolve) static ThrowCompletionOr<Value> perform_promise_any(VM& vm, IteratorRecord& iterator_record, Value constructor, PromiseCapability& result_capability, Value promise_resolve)
{ {
auto& realm = *vm.current_realm(); auto& realm = *vm.current_realm();
@ -225,7 +225,7 @@ static ThrowCompletionOr<Value> perform_promise_any(VM& vm, Iterator& iterator_r
} }
// 27.2.4.5.1 PerformPromiseRace ( iteratorRecord, constructor, resultCapability, promiseResolve ), https://tc39.es/ecma262/#sec-performpromiserace // 27.2.4.5.1 PerformPromiseRace ( iteratorRecord, constructor, resultCapability, promiseResolve ), https://tc39.es/ecma262/#sec-performpromiserace
static ThrowCompletionOr<Value> perform_promise_race(VM& vm, Iterator& iterator_record, Value constructor, PromiseCapability const& result_capability, Value promise_resolve) static ThrowCompletionOr<Value> perform_promise_race(VM& vm, IteratorRecord& iterator_record, Value constructor, PromiseCapability const& result_capability, Value promise_resolve)
{ {
return perform_promise_common( return perform_promise_common(
vm, iterator_record, constructor, result_capability, promise_resolve, vm, iterator_record, constructor, result_capability, promise_resolve,

View file

@ -248,7 +248,7 @@ static ThrowCompletionOr<SetRecord> get_set_record(VM& vm, Value value)
} }
// 10 GetKeysIterator ( setRec ), https://tc39.es/proposal-set-methods/#sec-getkeysiterator // 10 GetKeysIterator ( setRec ), https://tc39.es/proposal-set-methods/#sec-getkeysiterator
static ThrowCompletionOr<Iterator> get_keys_iterator(VM& vm, SetRecord const& set_record) static ThrowCompletionOr<IteratorRecord> get_keys_iterator(VM& vm, SetRecord const& set_record)
{ {
// 1. Let keysIter be ? Call(setRec.[[Keys]], setRec.[[Set]]). // 1. Let keysIter be ? Call(setRec.[[Keys]], setRec.[[Set]]).
auto keys_iterator = TRY(call(vm, *set_record.keys, set_record.set)); auto keys_iterator = TRY(call(vm, *set_record.keys, set_record.set));
@ -265,7 +265,7 @@ static ThrowCompletionOr<Iterator> get_keys_iterator(VM& vm, SetRecord const& se
return vm.throw_completion<TypeError>(ErrorType::NotAFunction, TRY_OR_THROW_OOM(vm, next_method.to_string_without_side_effects())); return vm.throw_completion<TypeError>(ErrorType::NotAFunction, TRY_OR_THROW_OOM(vm, next_method.to_string_without_side_effects()));
// 5. Return a new Iterator Record { [[Iterator]]: keysIter, [[NextMethod]]: nextMethod, [[Done]]: false }. // 5. Return a new Iterator Record { [[Iterator]]: keysIter, [[NextMethod]]: nextMethod, [[Done]]: false }.
return Iterator { .iterator = &keys_iterator.as_object(), .next_method = next_method, .done = false }; return IteratorRecord { .iterator = &keys_iterator.as_object(), .next_method = next_method, .done = false };
} }
// 1 Set.prototype.union ( other ), https://tc39.es/proposal-set-methods/#sec-set.prototype.union // 1 Set.prototype.union ( other ), https://tc39.es/proposal-set-methods/#sec-set.prototype.union

View file

@ -466,7 +466,7 @@ ThrowCompletionOr<void> VM::property_binding_initialization(BindingPattern const
// 13.15.5.5 Runtime Semantics: IteratorDestructuringAssignmentEvaluation, https://tc39.es/ecma262/#sec-runtime-semantics-iteratordestructuringassignmentevaluation // 13.15.5.5 Runtime Semantics: IteratorDestructuringAssignmentEvaluation, https://tc39.es/ecma262/#sec-runtime-semantics-iteratordestructuringassignmentevaluation
// 8.5.3 Runtime Semantics: IteratorBindingInitialization, https://tc39.es/ecma262/#sec-runtime-semantics-iteratorbindinginitialization // 8.5.3 Runtime Semantics: IteratorBindingInitialization, https://tc39.es/ecma262/#sec-runtime-semantics-iteratorbindinginitialization
ThrowCompletionOr<void> VM::iterator_binding_initialization(BindingPattern const& binding, Iterator& iterator_record, Environment* environment) ThrowCompletionOr<void> VM::iterator_binding_initialization(BindingPattern const& binding, IteratorRecord& iterator_record, Environment* environment)
{ {
auto& vm = *this; auto& vm = *this;
auto& realm = *vm.current_realm(); auto& realm = *vm.current_realm();

View file

@ -289,7 +289,7 @@ private:
VM(OwnPtr<CustomData>, ErrorMessages); VM(OwnPtr<CustomData>, ErrorMessages);
ThrowCompletionOr<void> property_binding_initialization(BindingPattern const& binding, Value value, Environment* environment); ThrowCompletionOr<void> property_binding_initialization(BindingPattern const& binding, Value value, Environment* environment);
ThrowCompletionOr<void> iterator_binding_initialization(BindingPattern const& binding, Iterator& iterator_record, Environment* environment); ThrowCompletionOr<void> iterator_binding_initialization(BindingPattern const& binding, IteratorRecord& iterator_record, Environment* environment);
ThrowCompletionOr<NonnullGCPtr<Module>> resolve_imported_module(ScriptOrModule referencing_script_or_module, ModuleRequest const& module_request); ThrowCompletionOr<NonnullGCPtr<Module>> resolve_imported_module(ScriptOrModule referencing_script_or_module, ModuleRequest const& module_request);
ThrowCompletionOr<void> link_and_eval_module(Module& module); ThrowCompletionOr<void> link_and_eval_module(Module& module);