diff options
author | davidot <davidot@serenityos.org> | 2021-11-17 13:00:38 +0100 |
---|---|---|
committer | Linus Groh <mail@linusgroh.de> | 2021-11-17 13:12:05 +0000 |
commit | 22e679d8444a2a24ab9d4f48965e72e14e7c16b5 (patch) | |
tree | 13f5234524273d6a320161d5022e150e93d04ab7 /Userland/Utilities | |
parent | 3666d2132b49dfb090243356cbfc2fdf722dd87c (diff) | |
download | serenity-22e679d8444a2a24ab9d4f48965e72e14e7c16b5.zip |
LibJS + js: Rethrow exception on the vm after bytecode interpreter run
When the bytecode interpreter was converted to ThrowCompletionOr<Value>
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.
Diffstat (limited to 'Userland/Utilities')
-rw-r--r-- | Userland/Utilities/js.cpp | 5 |
1 files changed, 4 insertions, 1 deletions
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; } |