mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 10:47:44 +00:00
LibJS: Convert IterableToList AO to ThrowCompletionOr
This commit is contained in:
parent
ec54a7b5b0
commit
03b251a704
5 changed files with 8 additions and 14 deletions
|
@ -51,9 +51,7 @@ Value AggregateErrorConstructor::construct(FunctionObject& new_target)
|
||||||
|
|
||||||
TRY_OR_DISCARD(aggregate_error->install_error_cause(vm.argument(2)));
|
TRY_OR_DISCARD(aggregate_error->install_error_cause(vm.argument(2)));
|
||||||
|
|
||||||
auto errors_list = iterable_to_list(global_object, vm.argument(0));
|
auto errors_list = TRY_OR_DISCARD(iterable_to_list(global_object, vm.argument(0)));
|
||||||
if (vm.exception())
|
|
||||||
return {};
|
|
||||||
|
|
||||||
MUST(aggregate_error->define_property_or_throw(vm.names.errors, { .value = Array::create_from(global_object, errors_list), .writable = true, .enumerable = false, .configurable = true }));
|
MUST(aggregate_error->define_property_or_throw(vm.names.errors, { .value = Array::create_from(global_object, errors_list), .writable = true, .enumerable = false, .configurable = true }));
|
||||||
|
|
||||||
|
|
|
@ -147,19 +147,19 @@ Object* create_iterator_result_object(GlobalObject& global_object, Value value,
|
||||||
}
|
}
|
||||||
|
|
||||||
// 7.4.10 IterableToList ( items [ , method ] ), https://tc39.es/ecma262/#sec-iterabletolist
|
// 7.4.10 IterableToList ( items [ , method ] ), https://tc39.es/ecma262/#sec-iterabletolist
|
||||||
MarkedValueList iterable_to_list(GlobalObject& global_object, Value iterable, Value method)
|
ThrowCompletionOr<MarkedValueList> iterable_to_list(GlobalObject& global_object, Value iterable, Value method)
|
||||||
{
|
{
|
||||||
auto& vm = global_object.vm();
|
auto& vm = global_object.vm();
|
||||||
MarkedValueList values(vm.heap());
|
MarkedValueList values(vm.heap());
|
||||||
|
|
||||||
(void)get_iterator_values(
|
TRY(get_iterator_values(
|
||||||
global_object, iterable, [&](auto value) -> Optional<Completion> {
|
global_object, iterable, [&](auto value) -> Optional<Completion> {
|
||||||
values.append(value);
|
values.append(value);
|
||||||
return {};
|
return {};
|
||||||
},
|
},
|
||||||
method);
|
method));
|
||||||
|
|
||||||
return values;
|
return { move(values) };
|
||||||
}
|
}
|
||||||
|
|
||||||
Completion get_iterator_values(GlobalObject& global_object, Value iterable, IteratorValueCallback callback, Value method)
|
Completion get_iterator_values(GlobalObject& global_object, Value iterable, IteratorValueCallback callback, Value method)
|
||||||
|
|
|
@ -27,7 +27,7 @@ ThrowCompletionOr<bool> iterator_complete(GlobalObject&, Object& iterator_result
|
||||||
ThrowCompletionOr<Value> iterator_value(GlobalObject&, Object& iterator_result);
|
ThrowCompletionOr<Value> iterator_value(GlobalObject&, Object& iterator_result);
|
||||||
Completion iterator_close(Object& iterator, Completion completion);
|
Completion iterator_close(Object& iterator, Completion completion);
|
||||||
Object* create_iterator_result_object(GlobalObject&, Value value, bool done);
|
Object* create_iterator_result_object(GlobalObject&, Value value, bool done);
|
||||||
MarkedValueList iterable_to_list(GlobalObject&, Value iterable, Value method = {});
|
ThrowCompletionOr<MarkedValueList> iterable_to_list(GlobalObject&, Value iterable, Value method = {});
|
||||||
|
|
||||||
using IteratorValueCallback = Function<Optional<Completion>(Value)>;
|
using IteratorValueCallback = Function<Optional<Completion>(Value)>;
|
||||||
Completion get_iterator_values(GlobalObject& global_object, Value iterable, IteratorValueCallback callback, Value method = {});
|
Completion get_iterator_values(GlobalObject& global_object, Value iterable, IteratorValueCallback callback, Value method = {});
|
||||||
|
|
|
@ -465,9 +465,7 @@ void TypedArrayBase::visit_edges(Visitor& visitor)
|
||||||
} else { \
|
} else { \
|
||||||
auto iterator = TRY_OR_DISCARD(first_argument.get_method(global_object(), *vm.well_known_symbol_iterator())); \
|
auto iterator = TRY_OR_DISCARD(first_argument.get_method(global_object(), *vm.well_known_symbol_iterator())); \
|
||||||
if (iterator) { \
|
if (iterator) { \
|
||||||
auto values = iterable_to_list(global_object(), first_argument, iterator); \
|
auto values = TRY_OR_DISCARD(iterable_to_list(global_object(), first_argument, iterator)); \
|
||||||
if (vm.exception()) \
|
|
||||||
return {}; \
|
|
||||||
TRY_OR_DISCARD(initialize_typed_array_from_list(global_object(), *typed_array, values)); \
|
TRY_OR_DISCARD(initialize_typed_array_from_list(global_object(), *typed_array, values)); \
|
||||||
} else { \
|
} else { \
|
||||||
TRY_OR_DISCARD(initialize_typed_array_from_array_like(global_object(), *typed_array, first_argument.as_object())); \
|
TRY_OR_DISCARD(initialize_typed_array_from_array_like(global_object(), *typed_array, first_argument.as_object())); \
|
||||||
|
|
|
@ -79,9 +79,7 @@ JS_DEFINE_OLD_NATIVE_FUNCTION(TypedArrayConstructor::from)
|
||||||
|
|
||||||
auto using_iterator = TRY_OR_DISCARD(source.get_method(global_object, *vm.well_known_symbol_iterator()));
|
auto using_iterator = TRY_OR_DISCARD(source.get_method(global_object, *vm.well_known_symbol_iterator()));
|
||||||
if (using_iterator) {
|
if (using_iterator) {
|
||||||
auto values = iterable_to_list(global_object, source, using_iterator);
|
auto values = TRY_OR_DISCARD(iterable_to_list(global_object, source, using_iterator));
|
||||||
if (vm.exception())
|
|
||||||
return {};
|
|
||||||
|
|
||||||
MarkedValueList arguments(vm.heap());
|
MarkedValueList arguments(vm.heap());
|
||||||
arguments.empend(values.size());
|
arguments.empend(values.size());
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue