From cff8f56ce77c8ee9021a271ac70eeeb27cb37dc6 Mon Sep 17 00:00:00 2001 From: Daniel Bertalan Date: Sat, 15 Jul 2023 09:59:19 +0200 Subject: [PATCH] LibJS/Bytecode: Do not unwind eagerly after throwing `Await` If an exception was thrown while evaluating the argument of an `await` expression, we should jump to the continuation block instead of eagerly rejecting the caller async function. This restores the behavior prior to the addition of the separate `Await` instruction in d66eb4e3. --- Userland/Libraries/LibJS/Bytecode/Interpreter.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Userland/Libraries/LibJS/Bytecode/Interpreter.cpp b/Userland/Libraries/LibJS/Bytecode/Interpreter.cpp index b9ee21a682..882b21cbe9 100644 --- a/Userland/Libraries/LibJS/Bytecode/Interpreter.cpp +++ b/Userland/Libraries/LibJS/Bytecode/Interpreter.cpp @@ -278,7 +278,7 @@ Interpreter::ValueAndFrame Interpreter::run_and_return_frame(Realm& realm, Execu // but we generate a Yield Operation in the case of returns in // generators as well, so we need to check if it will actually // continue or is a `return` in disguise - will_yield = instruction.type() == Instruction::Type::Yield && static_cast(instruction).continuation().has_value(); + will_yield = (instruction.type() == Instruction::Type::Yield && static_cast(instruction).continuation().has_value()) || instruction.type() == Instruction::Type::Await; break; } ++pc;