Realm.h 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. /*
  2. * Copyright (c) 2021, Linus Groh <linusg@serenityos.org>
  3. * Copyright (c) 2022, Andreas Kling <kling@serenityos.org>
  4. *
  5. * SPDX-License-Identifier: BSD-2-Clause
  6. */
  7. #pragma once
  8. #include <AK/OwnPtr.h>
  9. #include <AK/StringView.h>
  10. #include <AK/Weakable.h>
  11. #include <LibJS/Heap/Cell.h>
  12. namespace JS {
  13. // 9.3 Realms, https://tc39.es/ecma262/#realm-record
  14. class Realm final
  15. : public Cell
  16. , public Weakable<Realm> {
  17. public:
  18. struct HostDefined {
  19. virtual ~HostDefined() = default;
  20. };
  21. Realm() = default;
  22. static Realm* create(VM&);
  23. void set_global_object(GlobalObject&, Object* this_value = nullptr);
  24. [[nodiscard]] GlobalObject& global_object() const { return *m_global_object; }
  25. [[nodiscard]] GlobalEnvironment& global_environment() const { return *m_global_environment; }
  26. HostDefined* host_defined() { return m_host_defined; }
  27. void set_host_defined(OwnPtr<HostDefined> host_defined) { m_host_defined = move(host_defined); }
  28. private:
  29. virtual StringView class_name() const override { return "Realm"sv; }
  30. virtual void visit_edges(Visitor&) override;
  31. GlobalObject* m_global_object { nullptr }; // [[GlobalObject]]
  32. GlobalEnvironment* m_global_environment { nullptr }; // [[GlobalEnv]]
  33. OwnPtr<HostDefined> m_host_defined; // [[HostDefined]]
  34. };
  35. }