Explorar o código

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.
Daniel Bertalan hai 1 ano
pai
achega
cff8f56ce7
Modificáronse 1 ficheiros con 1 adicións e 1 borrados
  1. 1 1
      Userland/Libraries/LibJS/Bytecode/Interpreter.cpp

+ 1 - 1
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<Op::Yield const&>(instruction).continuation().has_value();
+                will_yield = (instruction.type() == Instruction::Type::Yield && static_cast<Op::Yield const&>(instruction).continuation().has_value()) || instruction.type() == Instruction::Type::Await;
                 break;
             }
             ++pc;