1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 16:37:35 +00:00

LibJS+LibTest+js: Convert BC::Interpreter::run to ThrowCompletionOr<>

Note that this is just a shallow API change.
This commit is contained in:
Ali Mohammad Pur 2021-11-11 04:11:56 +03:30 committed by Linus Groh
parent 3b0bf05fa5
commit 070d2eaa51
7 changed files with 19 additions and 11 deletions

View file

@ -146,6 +146,12 @@ Interpreter::ValueAndFrame Interpreter::run_and_return_frame(Executable const& e
m_manually_entered_frames.take_last();
}
Value exception_value;
if (vm().exception()) {
exception_value = vm().exception()->value();
vm().clear_exception();
}
auto return_value = m_return_value.value_or(js_undefined());
m_return_value = {};
@ -162,6 +168,9 @@ Interpreter::ValueAndFrame Interpreter::run_and_return_frame(Executable const& e
vm().finish_execution_generation();
if (!exception_value.is_empty())
return { throw_completion(exception_value), move(frame) };
return { return_value, move(frame) };
}

View file

@ -32,14 +32,14 @@ public:
Realm& realm() { return m_realm; }
VM& vm() { return m_vm; }
Value run(Bytecode::Executable const& executable, Bytecode::BasicBlock const* entry_point = nullptr)
ThrowCompletionOr<Value> run(Bytecode::Executable const& executable, Bytecode::BasicBlock const* entry_point = nullptr)
{
auto value_and_frame = run_and_return_frame(executable, entry_point);
return value_and_frame.value;
}
struct ValueAndFrame {
Value value;
ThrowCompletionOr<Value> value;
OwnPtr<RegisterWindow> frame;
};
ValueAndFrame run_and_return_frame(Bytecode::Executable const&, Bytecode::BasicBlock const* entry_point);