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

LibJS: Let the bytecode interpreter set the VM's last value

This commit is contained in:
Gunnar Beutner 2021-06-10 21:01:44 +02:00 committed by Andreas Kling
parent 023df8e596
commit 319a60043b
3 changed files with 7 additions and 2 deletions

View file

@ -41,6 +41,8 @@ Value Interpreter::run(Executable const& executable)
TemporaryChange restore_executable { m_current_executable, &executable };
vm().set_last_value(Badge<Interpreter> {}, {});
CallFrame global_call_frame;
if (vm().call_stack().is_empty()) {
global_call_frame.this_value = &global_object();
@ -102,6 +104,8 @@ Value Interpreter::run(Executable const& executable)
}
}
vm().set_last_value(Badge<Interpreter> {}, accumulator());
m_register_windows.take_last();
auto return_value = m_return_value.value_or(js_undefined());

View file

@ -43,7 +43,7 @@ void Interpreter::run(GlobalObject& global_object, const Program& program)
VM::InterpreterExecutionScope scope(*this);
vm.set_last_value({}, {});
vm.set_last_value(Badge<Interpreter> {}, {});
CallFrame global_call_frame;
global_call_frame.current_node = &program;
@ -56,7 +56,7 @@ void Interpreter::run(GlobalObject& global_object, const Program& program)
vm.push_call_frame(global_call_frame, global_object);
VERIFY(!vm.exception());
auto value = program.execute(*this, global_object);
vm.set_last_value({}, value.value_or(js_undefined()));
vm.set_last_value(Badge<Interpreter> {}, value.value_or(js_undefined()));
vm.pop_call_frame();

View file

@ -158,6 +158,7 @@ public:
}
Value last_value() const { return m_last_value; }
void set_last_value(Badge<Bytecode::Interpreter>, Value value) { m_last_value = value; }
void set_last_value(Badge<Interpreter>, Value value) { m_last_value = value; }
const StackInfo& stack_info() const { return m_stack_info; };