LibJS: Change Interpreter::create_with_existing_{global_object => realm}

We need both a GlobalObject and Realm now, but can get the former from
the latter (once initialized).
This also fixes JS execution in LibWeb, as we failed to set the Realm of
the newly created Interpreter in this function.
This commit is contained in:
Linus Groh 2021-09-12 12:33:54 +01:00 committed by Andreas Kling
parent 106f295916
commit 7b92889e6b
Notes: sideshowbarker 2024-07-18 04:09:45 +09:00
5 changed files with 7 additions and 5 deletions

View file

@ -18,11 +18,13 @@
namespace JS {
NonnullOwnPtr<Interpreter> Interpreter::create_with_existing_global_object(GlobalObject& global_object)
NonnullOwnPtr<Interpreter> Interpreter::create_with_existing_realm(Realm& realm)
{
auto& global_object = realm.global_object();
DeferGC defer_gc(global_object.heap());
auto interpreter = adopt_own(*new Interpreter(global_object.vm()));
interpreter->m_global_object = make_handle(&global_object);
interpreter->m_realm = make_handle(&realm);
return interpreter;
}

View file

@ -48,7 +48,7 @@ public:
return interpreter;
}
static NonnullOwnPtr<Interpreter> create_with_existing_global_object(GlobalObject&);
static NonnullOwnPtr<Interpreter> create_with_existing_realm(Realm&);
~Interpreter();

View file

@ -90,7 +90,7 @@ Value FunctionConstructor::construct(FunctionObject& new_target)
Interpreter* interpreter = vm().interpreter_if_exists();
if (!interpreter) {
local_interpreter = Interpreter::create_with_existing_global_object(global_object());
local_interpreter = Interpreter::create_with_existing_realm(*realm());
interpreter = local_interpreter.ptr();
}

View file

@ -203,7 +203,7 @@ Value OrdinaryFunctionObject::execute_function_body()
ast_interpreter = vm.interpreter_if_exists();
if (!ast_interpreter) {
local_interpreter = Interpreter::create_with_existing_global_object(global_object());
local_interpreter = Interpreter::create_with_existing_realm(*realm());
ast_interpreter = local_interpreter.ptr();
}

View file

@ -53,7 +53,7 @@ JS::Value ClassicScript::run(RethrowErrors rethrow_errors)
{
(void)rethrow_errors;
auto interpreter = JS::Interpreter::create_with_existing_global_object(m_script_record->realm().global_object());
auto interpreter = JS::Interpreter::create_with_existing_realm(m_script_record->realm());
interpreter->run(interpreter->global_object(), m_script_record->parse_node());
auto& vm = interpreter->vm();
if (vm.exception())