From 7b92889e6bbafba2fcc74b9048fa5f05f07ce528 Mon Sep 17 00:00:00 2001 From: Linus Groh Date: Sun, 12 Sep 2021 12:33:54 +0100 Subject: 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. --- Userland/Libraries/LibJS/Interpreter.cpp | 4 +++- Userland/Libraries/LibJS/Interpreter.h | 2 +- Userland/Libraries/LibJS/Runtime/FunctionConstructor.cpp | 2 +- Userland/Libraries/LibJS/Runtime/OrdinaryFunctionObject.cpp | 2 +- Userland/Libraries/LibWeb/HTML/Scripting/ClassicScript.cpp | 2 +- 5 files changed, 7 insertions(+), 5 deletions(-) (limited to 'Userland') diff --git a/Userland/Libraries/LibJS/Interpreter.cpp b/Userland/Libraries/LibJS/Interpreter.cpp index 06cdadabc3..bbf5282323 100644 --- a/Userland/Libraries/LibJS/Interpreter.cpp +++ b/Userland/Libraries/LibJS/Interpreter.cpp @@ -18,11 +18,13 @@ namespace JS { -NonnullOwnPtr Interpreter::create_with_existing_global_object(GlobalObject& global_object) +NonnullOwnPtr 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; } diff --git a/Userland/Libraries/LibJS/Interpreter.h b/Userland/Libraries/LibJS/Interpreter.h index cb75ab14ce..aaea4fc382 100644 --- a/Userland/Libraries/LibJS/Interpreter.h +++ b/Userland/Libraries/LibJS/Interpreter.h @@ -48,7 +48,7 @@ public: return interpreter; } - static NonnullOwnPtr create_with_existing_global_object(GlobalObject&); + static NonnullOwnPtr create_with_existing_realm(Realm&); ~Interpreter(); diff --git a/Userland/Libraries/LibJS/Runtime/FunctionConstructor.cpp b/Userland/Libraries/LibJS/Runtime/FunctionConstructor.cpp index 39fe9e2637..b916a2e13c 100644 --- a/Userland/Libraries/LibJS/Runtime/FunctionConstructor.cpp +++ b/Userland/Libraries/LibJS/Runtime/FunctionConstructor.cpp @@ -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(); } diff --git a/Userland/Libraries/LibJS/Runtime/OrdinaryFunctionObject.cpp b/Userland/Libraries/LibJS/Runtime/OrdinaryFunctionObject.cpp index ad6ca49c72..b558040532 100644 --- a/Userland/Libraries/LibJS/Runtime/OrdinaryFunctionObject.cpp +++ b/Userland/Libraries/LibJS/Runtime/OrdinaryFunctionObject.cpp @@ -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(); } diff --git a/Userland/Libraries/LibWeb/HTML/Scripting/ClassicScript.cpp b/Userland/Libraries/LibWeb/HTML/Scripting/ClassicScript.cpp index 8f30022367..dcfe0b870b 100644 --- a/Userland/Libraries/LibWeb/HTML/Scripting/ClassicScript.cpp +++ b/Userland/Libraries/LibWeb/HTML/Scripting/ClassicScript.cpp @@ -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()) -- cgit v1.2.3