Realm.h 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. /*
  2. * Copyright (c) 2021-2022, 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/Badge.h>
  9. #include <AK/OwnPtr.h>
  10. #include <AK/StringView.h>
  11. #include <AK/Weakable.h>
  12. #include <LibJS/Heap/Cell.h>
  13. #include <LibJS/Runtime/Intrinsics.h>
  14. namespace JS {
  15. // 9.3 Realms, https://tc39.es/ecma262/#realm-record
  16. class Realm final
  17. : public Cell
  18. , public Weakable<Realm> {
  19. JS_CELL(Realm, Cell);
  20. public:
  21. struct HostDefined {
  22. virtual ~HostDefined() = default;
  23. virtual void visit_edges(Cell::Visitor&) { }
  24. };
  25. static ThrowCompletionOr<NonnullGCPtr<Realm>> create(VM&);
  26. static ThrowCompletionOr<NonnullOwnPtr<ExecutionContext>> initialize_host_defined_realm(VM&, Function<Object*(Realm&)> create_global_object, Function<Object*(Realm&)> create_global_this_value);
  27. void set_global_object(Object* global_object, Object* this_value);
  28. [[nodiscard]] Object& global_object() const { return *m_global_object; }
  29. [[nodiscard]] GlobalEnvironment& global_environment() const { return *m_global_environment; }
  30. [[nodiscard]] Intrinsics const& intrinsics() const { return *m_intrinsics; }
  31. [[nodiscard]] Intrinsics& intrinsics() { return *m_intrinsics; }
  32. void set_intrinsics(Badge<Intrinsics>, Intrinsics& intrinsics)
  33. {
  34. VERIFY(!m_intrinsics);
  35. m_intrinsics = &intrinsics;
  36. }
  37. HostDefined* host_defined() { return m_host_defined; }
  38. void set_host_defined(OwnPtr<HostDefined> host_defined) { m_host_defined = move(host_defined); }
  39. private:
  40. Realm() = default;
  41. virtual void visit_edges(Visitor&) override;
  42. GCPtr<Intrinsics> m_intrinsics; // [[Intrinsics]]
  43. GCPtr<Object> m_global_object; // [[GlobalObject]]
  44. GCPtr<GlobalEnvironment> m_global_environment; // [[GlobalEnv]]
  45. OwnPtr<HostDefined> m_host_defined; // [[HostDefined]]
  46. };
  47. }