summaryrefslogtreecommitdiff
path: root/Userland
diff options
context:
space:
mode:
Diffstat (limited to 'Userland')
-rw-r--r--Userland/Libraries/LibJS/Runtime/ECMAScriptFunctionObject.cpp6
-rw-r--r--Userland/Utilities/js.cpp5
2 files changed, 9 insertions, 2 deletions
diff --git a/Userland/Libraries/LibJS/Runtime/ECMAScriptFunctionObject.cpp b/Userland/Libraries/LibJS/Runtime/ECMAScriptFunctionObject.cpp
index 94e1a6a6c2..2a638dc0bf 100644
--- a/Userland/Libraries/LibJS/Runtime/ECMAScriptFunctionObject.cpp
+++ b/Userland/Libraries/LibJS/Runtime/ECMAScriptFunctionObject.cpp
@@ -769,7 +769,11 @@ Completion ECMAScriptFunctionObject::ordinary_call_evaluate_body()
return throw_completion(exception->value());
VERIFY(result_and_frame.frame != nullptr);
- auto result = TRY(result_and_frame.value);
+ if (result_and_frame.value.is_error()) {
+ vm.throw_exception(bytecode_interpreter->global_object(), result_and_frame.value.release_error().value());
+ return throw_completion(vm.exception()->value());
+ }
+ auto result = result_and_frame.value.release_value();
// NOTE: Running the bytecode should eventually return a completion.
// Until it does, we assume "return" and include the undefined fallback from the call site.
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;
}