diff options
Diffstat (limited to 'Userland/Libraries/LibJS/Runtime/Realm.h')
-rw-r--r-- | Userland/Libraries/LibJS/Runtime/Realm.h | 37 |
1 files changed, 37 insertions, 0 deletions
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]] +}; + +} |