diff --git a/Userland/Libraries/LibJS/Bytecode/Op.cpp b/Userland/Libraries/LibJS/Bytecode/Op.cpp index b342afe968..5f49f4d92b 100644 --- a/Userland/Libraries/LibJS/Bytecode/Op.cpp +++ b/Userland/Libraries/LibJS/Bytecode/Op.cpp @@ -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. // 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 object = Object::create(realm, nullptr); @@ -273,9 +273,9 @@ static Object* iterator_to_object(VM& vm, Iterator iterator) 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(), .next_method = MUST(object.get(vm.names.next)), .done = MUST(object.get(vm.names.done)).as_bool() @@ -1052,7 +1052,7 @@ ThrowCompletionOr GetObjectPropertyIterator::execute_impl(Bytecode::Interp properties.set(TRY(PropertyKey::from_value(vm, key))); } } - Iterator iterator { + IteratorRecord iterator { .iterator = object, .next_method = NativeFunction::create( interpreter.realm(), diff --git a/Userland/Libraries/LibJS/Runtime/AsyncFromSyncIterator.cpp b/Userland/Libraries/LibJS/Runtime/AsyncFromSyncIterator.cpp index 3373535744..008782b75f 100644 --- a/Userland/Libraries/LibJS/Runtime/AsyncFromSyncIterator.cpp +++ b/Userland/Libraries/LibJS/Runtime/AsyncFromSyncIterator.cpp @@ -11,12 +11,12 @@ namespace JS { -NonnullGCPtr AsyncFromSyncIterator::create(Realm& realm, Iterator sync_iterator_record) +NonnullGCPtr AsyncFromSyncIterator::create(Realm& realm, IteratorRecord sync_iterator_record) { return realm.heap().allocate(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()) , m_sync_iterator_record(sync_iterator_record) { diff --git a/Userland/Libraries/LibJS/Runtime/AsyncFromSyncIterator.h b/Userland/Libraries/LibJS/Runtime/AsyncFromSyncIterator.h index 5188e74354..adbbbda039 100644 --- a/Userland/Libraries/LibJS/Runtime/AsyncFromSyncIterator.h +++ b/Userland/Libraries/LibJS/Runtime/AsyncFromSyncIterator.h @@ -17,20 +17,20 @@ class AsyncFromSyncIterator final : public Object { JS_OBJECT(AsyncFromSyncIterator, Object); public: - static NonnullGCPtr create(Realm&, Iterator sync_iterator_record); + static NonnullGCPtr create(Realm&, IteratorRecord sync_iterator_record); virtual ThrowCompletionOr initialize(Realm&) override; virtual ~AsyncFromSyncIterator() override = default; void visit_edges(Visitor& visitor) override; - Iterator& sync_iterator_record() { return m_sync_iterator_record; } - Iterator const& sync_iterator_record() const { return m_sync_iterator_record; } + IteratorRecord& sync_iterator_record() { return m_sync_iterator_record; } + IteratorRecord const& sync_iterator_record() const { return m_sync_iterator_record; } 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]] }; } diff --git a/Userland/Libraries/LibJS/Runtime/AsyncFromSyncIteratorPrototype.cpp b/Userland/Libraries/LibJS/Runtime/AsyncFromSyncIteratorPrototype.cpp index 38c4a6d4ab..8d9aed3627 100644 --- a/Userland/Libraries/LibJS/Runtime/AsyncFromSyncIteratorPrototype.cpp +++ b/Userland/Libraries/LibJS/Runtime/AsyncFromSyncIteratorPrototype.cpp @@ -199,7 +199,7 @@ JS_DEFINE_NATIVE_FUNCTION(AsyncFromSyncIteratorPrototype::throw_) } // 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(); @@ -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)); // 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. return iterator_record; diff --git a/Userland/Libraries/LibJS/Runtime/AsyncFromSyncIteratorPrototype.h b/Userland/Libraries/LibJS/Runtime/AsyncFromSyncIteratorPrototype.h index 5ec46d1d98..61184dd769 100644 --- a/Userland/Libraries/LibJS/Runtime/AsyncFromSyncIteratorPrototype.h +++ b/Userland/Libraries/LibJS/Runtime/AsyncFromSyncIteratorPrototype.h @@ -30,6 +30,6 @@ private: 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); } diff --git a/Userland/Libraries/LibJS/Runtime/Iterator.h b/Userland/Libraries/LibJS/Runtime/Iterator.h index 980d25d6a1..1cce4ffa5c 100644 --- a/Userland/Libraries/LibJS/Runtime/Iterator.h +++ b/Userland/Libraries/LibJS/Runtime/Iterator.h @@ -12,7 +12,7 @@ namespace JS { // 7.4.1 Iterator Records, https://tc39.es/ecma262/#sec-iterator-records -struct Iterator { +struct IteratorRecord { GCPtr iterator; // [[Iterator]] Value next_method; // [[NextMethod]] bool done { false }; // [[Done]] diff --git a/Userland/Libraries/LibJS/Runtime/IteratorOperations.cpp b/Userland/Libraries/LibJS/Runtime/IteratorOperations.cpp index 822410a95d..a3e1cecf6d 100644 --- a/Userland/Libraries/LibJS/Runtime/IteratorOperations.cpp +++ b/Userland/Libraries/LibJS/Runtime/IteratorOperations.cpp @@ -15,7 +15,7 @@ namespace JS { // 7.4.2 GetIterator ( obj [ , hint [ , method ] ] ), https://tc39.es/ecma262/#sec-getiterator -ThrowCompletionOr get_iterator(VM& vm, Value value, IteratorHint hint, Optional method) +ThrowCompletionOr get_iterator(VM& vm, Value value, IteratorHint hint, Optional method) { // 1. If hint is not present, set hint to sync. @@ -61,14 +61,14 @@ ThrowCompletionOr get_iterator(VM& vm, Value value, IteratorHint hint, auto next_method = TRY(iterator.get(vm, vm.names.next)); // 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. return iterator_record; } // 7.4.3 IteratorNext ( iteratorRecord [ , value ] ), https://tc39.es/ecma262/#sec-iteratornext -ThrowCompletionOr> iterator_next(VM& vm, Iterator const& iterator_record, Optional value) +ThrowCompletionOr> iterator_next(VM& vm, IteratorRecord const& iterator_record, Optional value) { Value result; @@ -104,7 +104,7 @@ ThrowCompletionOr iterator_value(VM& vm, Object& iterator_result) } // 7.4.6 IteratorStep ( iteratorRecord ), https://tc39.es/ecma262/#sec-iteratorstep -ThrowCompletionOr> iterator_step(VM& vm, Iterator const& iterator_record) +ThrowCompletionOr> iterator_step(VM& vm, IteratorRecord const& iterator_record) { // 1. Let result be ? IteratorNext(iteratorRecord). auto result = TRY(iterator_next(vm, iterator_record)); @@ -123,7 +123,7 @@ ThrowCompletionOr> iterator_step(VM& vm, Iterator const& iterator_ // 7.4.7 IteratorClose ( iteratorRecord, completion ), https://tc39.es/ecma262/#sec-iteratorclose // 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. -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. @@ -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 -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); } // 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); } diff --git a/Userland/Libraries/LibJS/Runtime/IteratorOperations.h b/Userland/Libraries/LibJS/Runtime/IteratorOperations.h index 97b813e59e..497793c29f 100644 --- a/Userland/Libraries/LibJS/Runtime/IteratorOperations.h +++ b/Userland/Libraries/LibJS/Runtime/IteratorOperations.h @@ -22,13 +22,13 @@ enum class IteratorHint { Async, }; -ThrowCompletionOr get_iterator(VM&, Value, IteratorHint = IteratorHint::Sync, Optional method = {}); -ThrowCompletionOr> iterator_next(VM&, Iterator const&, Optional = {}); -ThrowCompletionOr> iterator_step(VM&, Iterator const&); +ThrowCompletionOr get_iterator(VM&, Value, IteratorHint = IteratorHint::Sync, Optional method = {}); +ThrowCompletionOr> iterator_next(VM&, IteratorRecord const&, Optional = {}); +ThrowCompletionOr> iterator_step(VM&, IteratorRecord const&); ThrowCompletionOr iterator_complete(VM&, Object& iterator_result); ThrowCompletionOr iterator_value(VM&, Object& iterator_result); -Completion iterator_close(VM&, Iterator const&, Completion); -Completion async_iterator_close(VM&, Iterator const&, Completion); +Completion iterator_close(VM&, IteratorRecord const&, Completion); +Completion async_iterator_close(VM&, IteratorRecord const&, Completion); NonnullGCPtr create_iterator_result_object(VM&, Value, bool done); ThrowCompletionOr> iterable_to_list(VM&, Value iterable, Optional method = {}); diff --git a/Userland/Libraries/LibJS/Runtime/PromiseConstructor.cpp b/Userland/Libraries/LibJS/Runtime/PromiseConstructor.cpp index c3f87536da..86e80e0632 100644 --- a/Userland/Libraries/LibJS/Runtime/PromiseConstructor.cpp +++ b/Userland/Libraries/LibJS/Runtime/PromiseConstructor.cpp @@ -39,7 +39,7 @@ static ThrowCompletionOr get_promise_resolve(VM& vm, Value constructor) using EndOfElementsCallback = Function(PromiseValueList&)>; using InvokeElementFunctionCallback = Function(PromiseValueList&, RemainingElements&, Value, size_t)>; -static ThrowCompletionOr 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 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(promise_resolve.is_function()); @@ -113,7 +113,7 @@ static ThrowCompletionOr perform_promise_common(VM& vm, Iterator& iterato } // 27.2.4.1.2 PerformPromiseAll ( iteratorRecord, constructor, resultCapability, promiseResolve ), https://tc39.es/ecma262/#sec-performpromiseall -static ThrowCompletionOr perform_promise_all(VM& vm, Iterator& iterator_record, Value constructor, PromiseCapability const& result_capability, Value promise_resolve) +static ThrowCompletionOr perform_promise_all(VM& vm, IteratorRecord& iterator_record, Value constructor, PromiseCapability const& result_capability, Value promise_resolve) { auto& realm = *vm.current_realm(); @@ -147,7 +147,7 @@ static ThrowCompletionOr perform_promise_all(VM& vm, Iterator& iterator_r } // 27.2.4.2.1 PerformPromiseAllSettled ( iteratorRecord, constructor, resultCapability, promiseResolve ), https://tc39.es/ecma262/#sec-performpromiseallsettled -static ThrowCompletionOr perform_promise_all_settled(VM& vm, Iterator& iterator_record, Value constructor, PromiseCapability const& result_capability, Value promise_resolve) +static ThrowCompletionOr perform_promise_all_settled(VM& vm, IteratorRecord& iterator_record, Value constructor, PromiseCapability const& result_capability, Value promise_resolve) { auto& realm = *vm.current_realm(); @@ -190,7 +190,7 @@ static ThrowCompletionOr perform_promise_all_settled(VM& vm, Iterator& it } // 27.2.4.3.1 PerformPromiseAny ( iteratorRecord, constructor, resultCapability, promiseResolve ), https://tc39.es/ecma262/#sec-performpromiseany -static ThrowCompletionOr perform_promise_any(VM& vm, Iterator& iterator_record, Value constructor, PromiseCapability& result_capability, Value promise_resolve) +static ThrowCompletionOr perform_promise_any(VM& vm, IteratorRecord& iterator_record, Value constructor, PromiseCapability& result_capability, Value promise_resolve) { auto& realm = *vm.current_realm(); @@ -225,7 +225,7 @@ static ThrowCompletionOr perform_promise_any(VM& vm, Iterator& iterator_r } // 27.2.4.5.1 PerformPromiseRace ( iteratorRecord, constructor, resultCapability, promiseResolve ), https://tc39.es/ecma262/#sec-performpromiserace -static ThrowCompletionOr perform_promise_race(VM& vm, Iterator& iterator_record, Value constructor, PromiseCapability const& result_capability, Value promise_resolve) +static ThrowCompletionOr perform_promise_race(VM& vm, IteratorRecord& iterator_record, Value constructor, PromiseCapability const& result_capability, Value promise_resolve) { return perform_promise_common( vm, iterator_record, constructor, result_capability, promise_resolve, diff --git a/Userland/Libraries/LibJS/Runtime/SetPrototype.cpp b/Userland/Libraries/LibJS/Runtime/SetPrototype.cpp index d65d29395b..ae706d4b42 100644 --- a/Userland/Libraries/LibJS/Runtime/SetPrototype.cpp +++ b/Userland/Libraries/LibJS/Runtime/SetPrototype.cpp @@ -248,7 +248,7 @@ static ThrowCompletionOr get_set_record(VM& vm, Value value) } // 10 GetKeysIterator ( setRec ), https://tc39.es/proposal-set-methods/#sec-getkeysiterator -static ThrowCompletionOr get_keys_iterator(VM& vm, SetRecord const& set_record) +static ThrowCompletionOr get_keys_iterator(VM& vm, SetRecord const& set_record) { // 1. Let keysIter be ? Call(setRec.[[Keys]], setRec.[[Set]]). auto keys_iterator = TRY(call(vm, *set_record.keys, set_record.set)); @@ -265,7 +265,7 @@ static ThrowCompletionOr get_keys_iterator(VM& vm, SetRecord const& se return vm.throw_completion(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 }. - 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 diff --git a/Userland/Libraries/LibJS/Runtime/VM.cpp b/Userland/Libraries/LibJS/Runtime/VM.cpp index e9403dafd3..162edf6a94 100644 --- a/Userland/Libraries/LibJS/Runtime/VM.cpp +++ b/Userland/Libraries/LibJS/Runtime/VM.cpp @@ -466,7 +466,7 @@ ThrowCompletionOr VM::property_binding_initialization(BindingPattern const // 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 -ThrowCompletionOr VM::iterator_binding_initialization(BindingPattern const& binding, Iterator& iterator_record, Environment* environment) +ThrowCompletionOr VM::iterator_binding_initialization(BindingPattern const& binding, IteratorRecord& iterator_record, Environment* environment) { auto& vm = *this; auto& realm = *vm.current_realm(); diff --git a/Userland/Libraries/LibJS/Runtime/VM.h b/Userland/Libraries/LibJS/Runtime/VM.h index 457315f3e3..944b29ff06 100644 --- a/Userland/Libraries/LibJS/Runtime/VM.h +++ b/Userland/Libraries/LibJS/Runtime/VM.h @@ -289,7 +289,7 @@ private: VM(OwnPtr, ErrorMessages); ThrowCompletionOr property_binding_initialization(BindingPattern const& binding, Value value, Environment* environment); - ThrowCompletionOr iterator_binding_initialization(BindingPattern const& binding, Iterator& iterator_record, Environment* environment); + ThrowCompletionOr iterator_binding_initialization(BindingPattern const& binding, IteratorRecord& iterator_record, Environment* environment); ThrowCompletionOr> resolve_imported_module(ScriptOrModule referencing_script_or_module, ModuleRequest const& module_request); ThrowCompletionOr link_and_eval_module(Module& module);