From 1c05d39abc003bca16a7a56fdb131fc01dccc059 Mon Sep 17 00:00:00 2001 From: Linus Groh Date: Tue, 28 Dec 2021 14:48:32 +0100 Subject: [PATCH] LibJS: Also throw exception when returning throw completion from await ...for now - the reason being that the AST breaks 'completion bubbling' and returns a plain Value, and code at the call site relies on the VM having an exception set when converting the plain value back into a completion. Fixes #11301. --- Userland/Libraries/LibJS/Runtime/Completion.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Userland/Libraries/LibJS/Runtime/Completion.cpp b/Userland/Libraries/LibJS/Runtime/Completion.cpp index 0376b5a481..d1187dec34 100644 --- a/Userland/Libraries/LibJS/Runtime/Completion.cpp +++ b/Userland/Libraries/LibJS/Runtime/Completion.cpp @@ -115,6 +115,10 @@ ThrowCompletionOr await(GlobalObject& global_object, Value value) if (success.value()) return result; + // NOTE: This is temporary until we remove VM::exception(). It's required as callers of + // AwaitExpression still need to check for an exception rather than a completion + // type as long as ASTNode::execute() returns a plain Value. + vm.throw_exception(global_object, result); return throw_completion(result); }