Internals.h 927 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. /*
  2. * Copyright (c) 2020, Andreas Kling <kling@serenityos.org>
  3. * Copyright (c) 2020-2023, the SerenityOS developers.
  4. *
  5. * SPDX-License-Identifier: BSD-2-Clause
  6. */
  7. #pragma once
  8. #include <AK/Types.h>
  9. #include <LibJS/Forward.h>
  10. namespace JS {
  11. class HeapBase {
  12. AK_MAKE_NONCOPYABLE(HeapBase);
  13. AK_MAKE_NONMOVABLE(HeapBase);
  14. public:
  15. VM& vm() { return m_vm; }
  16. protected:
  17. HeapBase(VM& vm)
  18. : m_vm(vm)
  19. {
  20. }
  21. VM& m_vm;
  22. };
  23. class HeapBlockBase {
  24. AK_MAKE_NONMOVABLE(HeapBlockBase);
  25. AK_MAKE_NONCOPYABLE(HeapBlockBase);
  26. public:
  27. static constexpr auto block_size = 4 * KiB;
  28. static HeapBlockBase* from_cell(Cell const* cell)
  29. {
  30. return reinterpret_cast<HeapBlockBase*>(bit_cast<FlatPtr>(cell) & ~(HeapBlockBase::block_size - 1));
  31. }
  32. Heap& heap() { return m_heap; }
  33. protected:
  34. HeapBlockBase(Heap& heap)
  35. : m_heap(heap)
  36. {
  37. }
  38. Heap& m_heap;
  39. };
  40. }