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