From 53e527281f2a772eb71d9f2b301c7be3dc053c8d Mon Sep 17 00:00:00 2001 From: Luke Wilde Date: Fri, 14 Jul 2023 21:48:51 +0100 Subject: [PATCH] LibJS/Bytecode: Propagate FDI errors normally for async generators Previously it returned a rejected promise, which is not correct: https://tc39.es/ecma262/#sec-runtime-semantics-evaluateasyncgeneratorbody ``` 1. Perform ? FunctionDeclarationInstantiation(functionObject, argumentsList). ``` --- Userland/Libraries/LibJS/Runtime/ECMAScriptFunctionObject.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Userland/Libraries/LibJS/Runtime/ECMAScriptFunctionObject.cpp b/Userland/Libraries/LibJS/Runtime/ECMAScriptFunctionObject.cpp index 9f4ac1b53a..ca01587bd7 100644 --- a/Userland/Libraries/LibJS/Runtime/ECMAScriptFunctionObject.cpp +++ b/Userland/Libraries/LibJS/Runtime/ECMAScriptFunctionObject.cpp @@ -891,7 +891,7 @@ Completion ECMAScriptFunctionObject::ordinary_call_evaluate_body() auto declaration_result = function_declaration_instantiation(nullptr); - if (m_kind == FunctionKind::Normal || m_kind == FunctionKind::Generator) { + if (m_kind == FunctionKind::Normal || m_kind == FunctionKind::Generator || m_kind == FunctionKind::AsyncGenerator) { if (declaration_result.is_error()) return declaration_result.release_error(); } @@ -899,7 +899,7 @@ Completion ECMAScriptFunctionObject::ordinary_call_evaluate_body() if (!m_bytecode_executable) m_bytecode_executable = TRY(Bytecode::compile(vm, *m_ecmascript_code, m_kind, m_name)); - if (m_kind == FunctionKind::Async || m_kind == FunctionKind::AsyncGenerator) { + if (m_kind == FunctionKind::Async) { if (declaration_result.is_throw_completion()) { auto promise_capability = MUST(new_promise_capability(vm, realm.intrinsics().promise_constructor())); MUST(call(vm, *promise_capability->reject(), js_undefined(), *declaration_result.throw_completion().value()));