LibJS: Replace iterator hint string argument with an enum

There's no reason at all for this to be a string or to accept arbitrary
values - just because it's displayed as strings in the spec doesn't mean
we have to do the same :^)
This commit is contained in:
Linus Groh 2021-06-02 20:52:46 +01:00
parent a5903ac4b6
commit 163d776df6
Notes: sideshowbarker 2024-07-18 16:59:53 +09:00
3 changed files with 10 additions and 6 deletions

View file

@ -10,12 +10,11 @@
namespace JS {
Object* get_iterator(GlobalObject& global_object, Value value, String hint, Value method)
Object* get_iterator(GlobalObject& global_object, Value value, IteratorHint hint, Value method)
{
auto& vm = global_object.vm();
VERIFY(hint == "sync" || hint == "async");
if (method.is_empty()) {
if (hint == "async")
if (hint == IteratorHint::Async)
TODO();
auto object = value.to_object(global_object);
if (!object)
@ -100,7 +99,7 @@ void get_iterator_values(GlobalObject& global_object, Value value, AK::Function<
{
auto& vm = global_object.vm();
auto iterator = get_iterator(global_object, value, "sync", method);
auto iterator = get_iterator(global_object, value, IteratorHint::Sync, method);
if (!iterator)
return;

View file

@ -14,7 +14,12 @@ namespace JS {
// Common iterator operations defined in ECMA262 7.4
// https://tc39.es/ecma262/#sec-operations-on-iterator-objects
Object* get_iterator(GlobalObject&, Value value, String hint = "sync", Value method = {});
enum class IteratorHint {
Sync,
Async,
};
Object* get_iterator(GlobalObject&, Value value, IteratorHint hint = IteratorHint::Sync, Value method = {});
bool is_iterator_complete(Object& iterator_result);
Value create_iterator_result_object(GlobalObject&, Value value, bool done);

View file

@ -180,7 +180,7 @@ void VM::assign(const NonnullRefPtr<BindingPattern>& target, Value value, Global
switch (binding.kind) {
case BindingPattern::Kind::Array: {
auto iterator = get_iterator(global_object, value, "sync"sv, {});
auto iterator = get_iterator(global_object, value);
if (!iterator)
return;