diff --git a/Userland/Libraries/LibJS/CMakeLists.txt b/Userland/Libraries/LibJS/CMakeLists.txt index 1bbccd8d89..82e3714450 100644 --- a/Userland/Libraries/LibJS/CMakeLists.txt +++ b/Userland/Libraries/LibJS/CMakeLists.txt @@ -21,6 +21,7 @@ set(SOURCES Interpreter.cpp Lexer.cpp MarkupGenerator.cpp + Module.cpp Parser.cpp Runtime/AbstractOperations.cpp Runtime/AggregateError.cpp diff --git a/Userland/Libraries/LibJS/Module.cpp b/Userland/Libraries/LibJS/Module.cpp new file mode 100644 index 0000000000..e99a54e18c --- /dev/null +++ b/Userland/Libraries/LibJS/Module.cpp @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2021, Andreas Kling + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include + +namespace JS { + +Module::Module(Realm& realm) + : m_vm(realm.vm()) + , m_realm(make_handle(&realm)) +{ +} + +Module::~Module() +{ +} + +} diff --git a/Userland/Libraries/LibJS/Module.h b/Userland/Libraries/LibJS/Module.h new file mode 100644 index 0000000000..8eb99d985b --- /dev/null +++ b/Userland/Libraries/LibJS/Module.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2021, Andreas Kling + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include +#include + +namespace JS { + +// 16.2.1.4 Abstract Module Records, https://tc39.es/ecma262/#sec-abstract-module-records +class Module : public RefCounted { +public: + virtual ~Module(); + + Realm& realm() { return *m_realm.cell(); } + Realm const& realm() const { return *m_realm.cell(); } + + Environment* environment() { return m_environment.cell(); } + Object* namespace_() { return m_namespace.cell(); } + +protected: + explicit Module(Realm&); + +private: + // Handles are not safe unless we keep the VM alive. + NonnullRefPtr m_vm; + + Handle m_realm; // [[Realm]] + Handle m_environment; // [[Environment]] + Handle m_namespace; // [[Namespace]] +}; + +}