summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibJS/Runtime
diff options
context:
space:
mode:
Diffstat (limited to 'Userland/Libraries/LibJS/Runtime')
-rw-r--r--Userland/Libraries/LibJS/Runtime/Realm.cpp17
-rw-r--r--Userland/Libraries/LibJS/Runtime/Realm.h37
2 files changed, 54 insertions, 0 deletions
diff --git a/Userland/Libraries/LibJS/Runtime/Realm.cpp b/Userland/Libraries/LibJS/Runtime/Realm.cpp
new file mode 100644
index 0000000000..7d832905f5
--- /dev/null
+++ b/Userland/Libraries/LibJS/Runtime/Realm.cpp
@@ -0,0 +1,17 @@
+/*
+ * Copyright (c) 2021, Linus Groh <linusg@serenityos.org>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#include <LibJS/Runtime/Realm.h>
+
+namespace JS {
+
+void Realm::visit_edges(Visitor& visitor)
+{
+ visitor.visit(m_global_object);
+ visitor.visit(m_global_environment);
+}
+
+}
diff --git a/Userland/Libraries/LibJS/Runtime/Realm.h b/Userland/Libraries/LibJS/Runtime/Realm.h
new file mode 100644
index 0000000000..56571729cf
--- /dev/null
+++ b/Userland/Libraries/LibJS/Runtime/Realm.h
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2021, Linus Groh <linusg@serenityos.org>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#pragma once
+
+#include <LibJS/Heap/Cell.h>
+#include <LibJS/Runtime/GlobalEnvironment.h>
+#include <LibJS/Runtime/GlobalObject.h>
+
+namespace JS {
+
+// 9.3 Realms, https://tc39.es/ecma262/#realm-record
+class Realm final : public Cell {
+public:
+ Realm() = default;
+
+ // 9.3.1 CreateRealm ( ), https://tc39.es/ecma262/#sec-createrealm
+ static Realm* create(VM& vm)
+ {
+ return vm.heap().allocate_without_global_object<Realm>();
+ }
+
+ [[nodiscard]] GlobalObject& global_object() const { return *m_global_object; }
+ [[nodiscard]] GlobalEnvironment& global_environment() const { return *m_global_environment; }
+
+private:
+ virtual char const* class_name() const override { return "Realm"; }
+ virtual void visit_edges(Visitor&) override;
+
+ GlobalObject* m_global_object { nullptr }; // [[GlobalObject]]
+ GlobalEnvironment* m_global_environment { nullptr }; // [[GlobalEnv]]
+};
+
+}