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:
parent
a5903ac4b6
commit
163d776df6
Notes:
sideshowbarker
2024-07-18 16:59:53 +09:00
3 changed files with 10 additions and 6 deletions
|
@ -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;
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue