mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 12:17:44 +00:00
LibJS: Convert GetPromiseResolve AO to ThrowCompletionOr
This is a bit ugly because, rather than simply wrapping the invocation to GetPromiseResolve with TRY(), we have to invoke the promise's reject method with any error. But this will be a bit cleaner in a subsequent commit to change how IfAbruptRejectPromise is invoked.
This commit is contained in:
parent
6d6cd87b7b
commit
9064491a47
1 changed files with 16 additions and 14 deletions
|
@ -22,16 +22,14 @@
|
||||||
namespace JS {
|
namespace JS {
|
||||||
|
|
||||||
// 27.2.4.1.1 GetPromiseResolve ( promiseConstructor ), https://tc39.es/ecma262/#sec-getpromiseresolve
|
// 27.2.4.1.1 GetPromiseResolve ( promiseConstructor ), https://tc39.es/ecma262/#sec-getpromiseresolve
|
||||||
static Value get_promise_resolve(GlobalObject& global_object, Value constructor)
|
static ThrowCompletionOr<Value> get_promise_resolve(GlobalObject& global_object, Value constructor)
|
||||||
{
|
{
|
||||||
VERIFY(constructor.is_constructor());
|
VERIFY(constructor.is_constructor());
|
||||||
auto& vm = global_object.vm();
|
auto& vm = global_object.vm();
|
||||||
|
|
||||||
auto promise_resolve = TRY_OR_DISCARD(constructor.get(global_object, vm.names.resolve));
|
auto promise_resolve = TRY(constructor.get(global_object, vm.names.resolve));
|
||||||
if (!promise_resolve.is_function()) {
|
if (!promise_resolve.is_function())
|
||||||
vm.throw_exception<TypeError>(global_object, ErrorType::NotAFunction, promise_resolve.to_string_without_side_effects());
|
return vm.throw_completion<TypeError>(global_object, ErrorType::NotAFunction, promise_resolve.to_string_without_side_effects());
|
||||||
return {};
|
|
||||||
}
|
|
||||||
|
|
||||||
return promise_resolve;
|
return promise_resolve;
|
||||||
}
|
}
|
||||||
|
@ -289,9 +287,10 @@ JS_DEFINE_OLD_NATIVE_FUNCTION(PromiseConstructor::all)
|
||||||
if (vm.exception())
|
if (vm.exception())
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
auto promise_resolve = get_promise_resolve(global_object, constructor);
|
auto promise_resolve_or_error = get_promise_resolve(global_object, constructor);
|
||||||
if (auto abrupt = if_abrupt_reject_promise(global_object, promise_resolve, promise_capability); abrupt.has_value())
|
if (auto abrupt = if_abrupt_reject_promise(global_object, promise_resolve_or_error, promise_capability); abrupt.has_value())
|
||||||
return abrupt.value();
|
return abrupt.value();
|
||||||
|
auto promise_resolve = promise_resolve_or_error.release_value();
|
||||||
|
|
||||||
auto iterator_record_or_error = get_iterator(global_object, vm.argument(0));
|
auto iterator_record_or_error = get_iterator(global_object, vm.argument(0));
|
||||||
if (auto abrupt = if_abrupt_reject_promise(global_object, iterator_record_or_error, promise_capability); abrupt.has_value())
|
if (auto abrupt = if_abrupt_reject_promise(global_object, iterator_record_or_error, promise_capability); abrupt.has_value())
|
||||||
|
@ -324,9 +323,10 @@ JS_DEFINE_OLD_NATIVE_FUNCTION(PromiseConstructor::all_settled)
|
||||||
if (vm.exception())
|
if (vm.exception())
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
auto promise_resolve = get_promise_resolve(global_object, constructor);
|
auto promise_resolve_or_error = get_promise_resolve(global_object, constructor);
|
||||||
if (auto abrupt = if_abrupt_reject_promise(global_object, promise_resolve, promise_capability); abrupt.has_value())
|
if (auto abrupt = if_abrupt_reject_promise(global_object, promise_resolve_or_error, promise_capability); abrupt.has_value())
|
||||||
return abrupt.value();
|
return abrupt.value();
|
||||||
|
auto promise_resolve = promise_resolve_or_error.release_value();
|
||||||
|
|
||||||
auto iterator_record_or_error = get_iterator(global_object, vm.argument(0));
|
auto iterator_record_or_error = get_iterator(global_object, vm.argument(0));
|
||||||
if (auto abrupt = if_abrupt_reject_promise(global_object, iterator_record_or_error, promise_capability); abrupt.has_value())
|
if (auto abrupt = if_abrupt_reject_promise(global_object, iterator_record_or_error, promise_capability); abrupt.has_value())
|
||||||
|
@ -359,9 +359,10 @@ JS_DEFINE_OLD_NATIVE_FUNCTION(PromiseConstructor::any)
|
||||||
if (vm.exception())
|
if (vm.exception())
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
auto promise_resolve = get_promise_resolve(global_object, constructor);
|
auto promise_resolve_or_error = get_promise_resolve(global_object, constructor);
|
||||||
if (auto abrupt = if_abrupt_reject_promise(global_object, promise_resolve, promise_capability); abrupt.has_value())
|
if (auto abrupt = if_abrupt_reject_promise(global_object, promise_resolve_or_error, promise_capability); abrupt.has_value())
|
||||||
return abrupt.value();
|
return abrupt.value();
|
||||||
|
auto promise_resolve = promise_resolve_or_error.release_value();
|
||||||
|
|
||||||
auto iterator_record_or_error = get_iterator(global_object, vm.argument(0));
|
auto iterator_record_or_error = get_iterator(global_object, vm.argument(0));
|
||||||
if (auto abrupt = if_abrupt_reject_promise(global_object, iterator_record_or_error, promise_capability); abrupt.has_value())
|
if (auto abrupt = if_abrupt_reject_promise(global_object, iterator_record_or_error, promise_capability); abrupt.has_value())
|
||||||
|
@ -394,9 +395,10 @@ JS_DEFINE_OLD_NATIVE_FUNCTION(PromiseConstructor::race)
|
||||||
if (vm.exception())
|
if (vm.exception())
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
auto promise_resolve = get_promise_resolve(global_object, constructor);
|
auto promise_resolve_or_error = get_promise_resolve(global_object, constructor);
|
||||||
if (auto abrupt = if_abrupt_reject_promise(global_object, promise_resolve, promise_capability); abrupt.has_value())
|
if (auto abrupt = if_abrupt_reject_promise(global_object, promise_resolve_or_error, promise_capability); abrupt.has_value())
|
||||||
return abrupt.value();
|
return abrupt.value();
|
||||||
|
auto promise_resolve = promise_resolve_or_error.release_value();
|
||||||
|
|
||||||
auto iterator_record_or_error = get_iterator(global_object, vm.argument(0));
|
auto iterator_record_or_error = get_iterator(global_object, vm.argument(0));
|
||||||
if (auto abrupt = if_abrupt_reject_promise(global_object, iterator_record_or_error, promise_capability); abrupt.has_value())
|
if (auto abrupt = if_abrupt_reject_promise(global_object, iterator_record_or_error, promise_capability); abrupt.has_value())
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue