From 22e679d8444a2a24ab9d4f48965e72e14e7c16b5 Mon Sep 17 00:00:00 2001 From: davidot Date: Wed, 17 Nov 2021 13:00:38 +0100 Subject: LibJS + js: Rethrow exception on the vm after bytecode interpreter run When the bytecode interpreter was converted to ThrowCompletionOr it then also cleared the vm.exception() making it seem like no exception was thrown. Also removed the TRY_OR_DISCARD as that would skip the error handling parts. --- Userland/Utilities/js.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'Userland/Utilities') diff --git a/Userland/Utilities/js.cpp b/Userland/Utilities/js.cpp index b8ff9b9881..29d57f2cfd 100644 --- a/Userland/Utilities/js.cpp +++ b/Userland/Utilities/js.cpp @@ -837,7 +837,10 @@ static bool parse_and_run(JS::Interpreter& interpreter, StringView source, Strin if (s_run_bytecode) { JS::Bytecode::Interpreter bytecode_interpreter(interpreter.global_object(), interpreter.realm()); - TRY_OR_DISCARD(bytecode_interpreter.run(executable)); + auto result = bytecode_interpreter.run(executable); + // Since all the error handling code uses vm.exception() we just rethrow any exception we got here. + if (result.is_error()) + vm->throw_exception(interpreter.global_object(), result.throw_completion().value()); } else { return true; } -- cgit v1.2.3