mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 04:37:34 +00:00
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). ```
This commit is contained in:
parent
265a9b5ffc
commit
53e527281f
1 changed files with 2 additions and 2 deletions
|
@ -891,7 +891,7 @@ Completion ECMAScriptFunctionObject::ordinary_call_evaluate_body()
|
||||||
|
|
||||||
auto declaration_result = function_declaration_instantiation(nullptr);
|
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())
|
if (declaration_result.is_error())
|
||||||
return declaration_result.release_error();
|
return declaration_result.release_error();
|
||||||
}
|
}
|
||||||
|
@ -899,7 +899,7 @@ Completion ECMAScriptFunctionObject::ordinary_call_evaluate_body()
|
||||||
if (!m_bytecode_executable)
|
if (!m_bytecode_executable)
|
||||||
m_bytecode_executable = TRY(Bytecode::compile(vm, *m_ecmascript_code, m_kind, m_name));
|
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()) {
|
if (declaration_result.is_throw_completion()) {
|
||||||
auto promise_capability = MUST(new_promise_capability(vm, realm.intrinsics().promise_constructor()));
|
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()));
|
MUST(call(vm, *promise_capability->reject(), js_undefined(), *declaration_result.throw_completion().value()));
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue