1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 05:08:13 +00:00

LibJS: Return early from Interpreter on unhandled exception

If we don't have a local unwind context to handle the exception, we can
just return right away. This allows us to remove one check from the
inner loop.
This commit is contained in:
Andreas Kling 2023-09-26 17:14:59 +02:00
parent c9eff35b96
commit 39cfb64269

View file

@ -173,14 +173,15 @@ void Interpreter::run_bytecode()
while (!pc.at_end()) {
auto& instruction = *pc;
auto ran_or_error = instruction.execute(*this);
if (ran_or_error.is_error()) [[unlikely]] {
reg(Register::exception()) = *ran_or_error.throw_completion().value();
if (unwind_contexts().is_empty())
break;
return;
auto& unwind_context = unwind_contexts().last();
if (unwind_context.executable != m_current_executable)
break;
return;
if (unwind_context.handler && !unwind_context.handler_called) {
vm().running_execution_context().lexical_environment = unwind_context.lexical_environment;
m_current_block = unwind_context.handler;
@ -234,9 +235,6 @@ void Interpreter::run_bytecode()
if (pc.at_end())
break;
if (!reg(Register::exception()).is_empty())
break;
if (will_return)
break;
}