/src/serenity/Userland/Libraries/LibJS/Heap/Internals.h
Line | Count | Source |
1 | | /* |
2 | | * Copyright (c) 2020-2024, Andreas Kling <andreas@ladybird.org> |
3 | | * Copyright (c) 2020-2023, the SerenityOS developers. |
4 | | * |
5 | | * SPDX-License-Identifier: BSD-2-Clause |
6 | | */ |
7 | | |
8 | | #pragma once |
9 | | |
10 | | #include <AK/Types.h> |
11 | | #include <LibJS/Forward.h> |
12 | | |
13 | | namespace JS { |
14 | | |
15 | | class HeapBase { |
16 | | AK_MAKE_NONCOPYABLE(HeapBase); |
17 | | AK_MAKE_NONMOVABLE(HeapBase); |
18 | | |
19 | | public: |
20 | 81.1k | VM& vm() { return m_vm; } |
21 | | |
22 | | protected: |
23 | | HeapBase(VM& vm) |
24 | 48 | : m_vm(vm) |
25 | 48 | { |
26 | 48 | } |
27 | | |
28 | | VM& m_vm; |
29 | | }; |
30 | | |
31 | | class HeapBlockBase { |
32 | | AK_MAKE_NONMOVABLE(HeapBlockBase); |
33 | | AK_MAKE_NONCOPYABLE(HeapBlockBase); |
34 | | |
35 | | public: |
36 | | static size_t block_size; |
37 | | static HeapBlockBase* from_cell(Cell const* cell) |
38 | 118k | { |
39 | 118k | return reinterpret_cast<HeapBlockBase*>(bit_cast<FlatPtr>(cell) & ~(HeapBlockBase::block_size - 1)); |
40 | 118k | } |
41 | | |
42 | 118k | Heap& heap() { return m_heap; } |
43 | | |
44 | | protected: |
45 | | HeapBlockBase(Heap& heap) |
46 | 3.87k | : m_heap(heap) |
47 | 3.87k | { |
48 | 3.87k | } |
49 | | |
50 | | Heap& m_heap; |
51 | | }; |
52 | | |
53 | | } |