summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Tests/LibJS/test-bytecode-js.cpp2
-rw-r--r--Userland/Applications/Spreadsheet/Spreadsheet.cpp2
-rw-r--r--Userland/Applications/Spreadsheet/Workbook.cpp4
-rw-r--r--Userland/Libraries/LibJS/Bytecode/Interpreter.cpp9
-rw-r--r--Userland/Libraries/LibJS/Bytecode/Interpreter.h4
-rw-r--r--Userland/Libraries/LibJS/Interpreter.cpp11
-rw-r--r--Userland/Libraries/LibJS/Interpreter.h10
-rw-r--r--Userland/Libraries/LibTest/JavaScriptTestRunner.h4
-rw-r--r--Userland/Services/WebContent/ConnectionFromClient.cpp4
-rw-r--r--Userland/Utilities/js.cpp2
10 files changed, 15 insertions, 37 deletions
diff --git a/Tests/LibJS/test-bytecode-js.cpp b/Tests/LibJS/test-bytecode-js.cpp
index 07f27b2808..90fe6acdf8 100644
--- a/Tests/LibJS/test-bytecode-js.cpp
+++ b/Tests/LibJS/test-bytecode-js.cpp
@@ -20,7 +20,7 @@
\
auto script = script_or_error.release_value(); \
auto const& program = script->parse_node(); \
- JS::Bytecode::Interpreter bytecode_interpreter(ast_interpreter->global_object(), ast_interpreter->realm());
+ JS::Bytecode::Interpreter bytecode_interpreter(ast_interpreter->realm());
#define EXPECT_NO_EXCEPTION(executable) \
auto executable = MUST(JS::Bytecode::Generator::generate(program)); \
diff --git a/Userland/Applications/Spreadsheet/Spreadsheet.cpp b/Userland/Applications/Spreadsheet/Spreadsheet.cpp
index e5da87ac9b..c8e3c4ab4a 100644
--- a/Userland/Applications/Spreadsheet/Spreadsheet.cpp
+++ b/Userland/Applications/Spreadsheet/Spreadsheet.cpp
@@ -43,7 +43,7 @@ Sheet::Sheet(Workbook& workbook)
, m_interpreter(JS::Interpreter::create<SheetGlobalObject>(m_workbook.vm(), *this))
{
JS::DeferGC defer_gc(m_workbook.vm().heap());
- m_global_object = static_cast<SheetGlobalObject*>(&m_interpreter->global_object());
+ m_global_object = static_cast<SheetGlobalObject*>(&m_interpreter->realm().global_object());
global_object().define_direct_property("workbook", m_workbook.workbook_object(), JS::default_attributes);
global_object().define_direct_property("thisSheet", &global_object(), JS::default_attributes); // Self-reference is unfortunate, but required.
diff --git a/Userland/Applications/Spreadsheet/Workbook.cpp b/Userland/Applications/Spreadsheet/Workbook.cpp
index 3ebdd15c6d..30411b3521 100644
--- a/Userland/Applications/Spreadsheet/Workbook.cpp
+++ b/Userland/Applications/Spreadsheet/Workbook.cpp
@@ -30,10 +30,10 @@ Workbook::Workbook(NonnullRefPtrVector<Sheet>&& sheets, GUI::Window& parent_wind
, m_parent_window(parent_window)
{
m_workbook_object = m_vm->heap().allocate<WorkbookObject>(m_interpreter->realm(), m_interpreter->realm(), *this);
- m_interpreter->global_object().define_direct_property("workbook", workbook_object(), JS::default_attributes);
+ m_interpreter->realm().global_object().define_direct_property("workbook", workbook_object(), JS::default_attributes);
m_main_execution_context.current_node = nullptr;
- m_main_execution_context.this_value = &m_interpreter->global_object();
+ m_main_execution_context.this_value = &m_interpreter->realm().global_object();
m_main_execution_context.function_name = "(global execution context)"sv;
m_main_execution_context.lexical_environment = &m_interpreter->realm().global_environment();
m_main_execution_context.variable_environment = &m_interpreter->realm().global_environment();
diff --git a/Userland/Libraries/LibJS/Bytecode/Interpreter.cpp b/Userland/Libraries/LibJS/Bytecode/Interpreter.cpp
index dceec8c5d3..8999675e8c 100644
--- a/Userland/Libraries/LibJS/Bytecode/Interpreter.cpp
+++ b/Userland/Libraries/LibJS/Bytecode/Interpreter.cpp
@@ -25,9 +25,8 @@ Interpreter* Interpreter::current()
return s_current;
}
-Interpreter::Interpreter(GlobalObject& global_object, Realm& realm)
- : m_vm(global_object.vm())
- , m_global_object(global_object)
+Interpreter::Interpreter(Realm& realm)
+ : m_vm(realm.vm())
, m_realm(realm)
{
VERIFY(!s_current);
@@ -51,7 +50,7 @@ Interpreter::ValueAndFrame Interpreter::run_and_return_frame(Executable const& e
ExecutionContext execution_context(vm().heap());
if (vm().execution_context_stack().is_empty() || !vm().running_execution_context().lexical_environment) {
// The "normal" interpreter pushes an execution context without environment so in that case we also want to push one.
- execution_context.this_value = &global_object();
+ execution_context.this_value = &m_realm.global_object();
static FlyString global_execution_context_name = "(*BC* global execution context)";
execution_context.function_name = global_execution_context_name;
execution_context.lexical_environment = &m_realm.global_environment();
@@ -69,7 +68,7 @@ Interpreter::ValueAndFrame Interpreter::run_and_return_frame(Executable const& e
m_register_windows.append(make<RegisterWindow>(MarkedVector<Value>(vm().heap()), MarkedVector<Environment*>(vm().heap()), MarkedVector<Environment*>(vm().heap())));
registers().resize(executable.number_of_registers);
- registers()[Register::global_object_index] = Value(&global_object());
+ registers()[Register::global_object_index] = Value(&m_realm.global_object());
for (;;) {
Bytecode::InstructionStreamIterator pc(block->instruction_stream());
diff --git a/Userland/Libraries/LibJS/Bytecode/Interpreter.h b/Userland/Libraries/LibJS/Bytecode/Interpreter.h
index 78904f0ebf..eafa76e6db 100644
--- a/Userland/Libraries/LibJS/Bytecode/Interpreter.h
+++ b/Userland/Libraries/LibJS/Bytecode/Interpreter.h
@@ -26,13 +26,12 @@ struct RegisterWindow {
class Interpreter {
public:
- Interpreter(GlobalObject&, Realm&);
+ explicit Interpreter(Realm&);
~Interpreter();
// FIXME: Remove this thing once we don't need it anymore!
static Interpreter* current();
- GlobalObject& global_object() { return m_global_object; }
Realm& realm() { return m_realm; }
VM& vm() { return m_vm; }
@@ -90,7 +89,6 @@ private:
static AK::Array<OwnPtr<PassManager>, static_cast<UnderlyingType<Interpreter::OptimizationLevel>>(Interpreter::OptimizationLevel::__Count)> s_optimization_pipelines;
VM& m_vm;
- GlobalObject& m_global_object;
Realm& m_realm;
Vector<Variant<NonnullOwnPtr<RegisterWindow>, RegisterWindow*>> m_register_windows;
Optional<BasicBlock const*> m_pending_jump;
diff --git a/Userland/Libraries/LibJS/Interpreter.cpp b/Userland/Libraries/LibJS/Interpreter.cpp
index 9439662269..a708d87d2c 100644
--- a/Userland/Libraries/LibJS/Interpreter.cpp
+++ b/Userland/Libraries/LibJS/Interpreter.cpp
@@ -25,7 +25,6 @@ NonnullOwnPtr<Interpreter> Interpreter::create_with_existing_realm(Realm& realm)
auto& vm = realm.vm();
DeferGC defer_gc(vm.heap());
auto interpreter = adopt_own(*new Interpreter(vm));
- interpreter->m_global_object = make_handle(&realm.global_object());
interpreter->m_realm = make_handle(&realm);
return interpreter;
}
@@ -140,16 +139,6 @@ ThrowCompletionOr<Value> Interpreter::run(SourceTextModule& module)
return js_undefined();
}
-GlobalObject& Interpreter::global_object()
-{
- return static_cast<GlobalObject&>(*m_global_object.cell());
-}
-
-GlobalObject const& Interpreter::global_object() const
-{
- return static_cast<GlobalObject const&>(*m_global_object.cell());
-}
-
Realm& Interpreter::realm()
{
return static_cast<Realm&>(*m_realm.cell());
diff --git a/Userland/Libraries/LibJS/Interpreter.h b/Userland/Libraries/LibJS/Interpreter.h
index 0a8c1647fd..478ecbfa1a 100644
--- a/Userland/Libraries/LibJS/Interpreter.h
+++ b/Userland/Libraries/LibJS/Interpreter.h
@@ -43,15 +43,13 @@ public:
auto interpreter = adopt_own(*new Interpreter(vm));
VM::InterpreterExecutionScope scope(*interpreter);
- GlobalObject* global_object { nullptr };
Realm* realm { nullptr };
interpreter->m_global_execution_context = MUST(Realm::initialize_host_defined_realm(
vm,
[&](Realm& realm_) -> GlobalObject* {
- global_object = interpreter->heap().allocate_without_realm<GlobalObjectType>(realm_, forward<Args>(args)...);
realm = &realm_;
- return global_object;
+ return interpreter->heap().allocate_without_realm<GlobalObjectType>(realm_, forward<Args>(args)...);
},
nullptr));
@@ -59,7 +57,6 @@ public:
static FlyString global_execution_context_name = "(global execution context)";
interpreter->m_global_execution_context->function_name = global_execution_context_name;
- interpreter->m_global_object = make_handle(global_object);
interpreter->m_realm = make_handle(realm);
return interpreter;
@@ -72,9 +69,6 @@ public:
ThrowCompletionOr<Value> run(Script&);
ThrowCompletionOr<Value> run(SourceTextModule&);
- GlobalObject& global_object();
- GlobalObject const& global_object() const;
-
Realm& realm();
Realm const& realm() const;
@@ -104,8 +98,6 @@ private:
ExecutingASTNodeChain* m_ast_node_chain { nullptr };
NonnullRefPtr<VM> m_vm;
-
- Handle<GlobalObject> m_global_object;
Handle<Realm> m_realm;
// This is here to keep the global execution context alive for the entire lifespan of the Interpreter.
diff --git a/Userland/Libraries/LibTest/JavaScriptTestRunner.h b/Userland/Libraries/LibTest/JavaScriptTestRunner.h
index be8719fb2d..eef825661d 100644
--- a/Userland/Libraries/LibTest/JavaScriptTestRunner.h
+++ b/Userland/Libraries/LibTest/JavaScriptTestRunner.h
@@ -365,7 +365,7 @@ inline JSFileResult TestRunner::run_file_test(String const& test_path)
executable->name = test_path;
if (JS::Bytecode::g_dump_bytecode)
executable->dump();
- JS::Bytecode::Interpreter bytecode_interpreter(interpreter->global_object(), interpreter->realm());
+ JS::Bytecode::Interpreter bytecode_interpreter(interpreter->realm());
MUST(bytecode_interpreter.run(*executable));
} else {
g_vm->push_execution_context(global_execution_context);
@@ -383,7 +383,7 @@ inline JSFileResult TestRunner::run_file_test(String const& test_path)
executable->name = test_path;
if (JS::Bytecode::g_dump_bytecode)
executable->dump();
- JS::Bytecode::Interpreter bytecode_interpreter(interpreter->realm().global_object(), interpreter->realm());
+ JS::Bytecode::Interpreter bytecode_interpreter(interpreter->realm());
(void)bytecode_interpreter.run(*executable);
}
} else {
diff --git a/Userland/Services/WebContent/ConnectionFromClient.cpp b/Userland/Services/WebContent/ConnectionFromClient.cpp
index f5148e7c4d..90bb582e09 100644
--- a/Userland/Services/WebContent/ConnectionFromClient.cpp
+++ b/Userland/Services/WebContent/ConnectionFromClient.cpp
@@ -390,8 +390,8 @@ void ConnectionFromClient::initialize_js_console(Badge<PageHost>)
return;
m_interpreter = interpreter;
- m_console_client = make<WebContentConsoleClient>(interpreter->global_object().console(), interpreter, *this);
- interpreter->global_object().console().set_client(*m_console_client.ptr());
+ m_console_client = make<WebContentConsoleClient>(interpreter->realm().global_object().console(), interpreter, *this);
+ interpreter->realm().global_object().console().set_client(*m_console_client.ptr());
}
void ConnectionFromClient::js_console_input(String const& js_source)
diff --git a/Userland/Utilities/js.cpp b/Userland/Utilities/js.cpp
index 84dffb5e12..b9f4c187e3 100644
--- a/Userland/Utilities/js.cpp
+++ b/Userland/Utilities/js.cpp
@@ -1170,7 +1170,7 @@ static bool parse_and_run(JS::Interpreter& interpreter, StringView source, Strin
executable->dump();
if (s_run_bytecode) {
- JS::Bytecode::Interpreter bytecode_interpreter(interpreter.realm().global_object(), interpreter.realm());
+ JS::Bytecode::Interpreter bytecode_interpreter(interpreter.realm());
auto result_or_error = bytecode_interpreter.run_and_return_frame(*executable, nullptr);
if (result_or_error.value.is_error())
result = result_or_error.value.release_error();