mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-01-24 02:03:06 -05:00
392b5c3b19
Cell::heap() and Cell::vm() needed to access member functions from HeapBlock, and wanted to be inline, so they were moved to VM.h. That approach will no longer work with VM.h not being included in every file (starting from the next commit), so this commit fixes that circular import issue by introducing secondary base classes to host the references to Heap and VM, respectively.
53 lines
928 B
C++
53 lines
928 B
C++
/*
|
|
* Copyright (c) 2020, Andreas Kling <kling@serenityos.org>
|
|
* Copyright (c) 2020-2023, the SerenityOS developers.
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <AK/Types.h>
|
|
#include <LibJS/Forward.h>
|
|
|
|
namespace JS {
|
|
|
|
class HeapBase {
|
|
AK_MAKE_NONCOPYABLE(HeapBase);
|
|
AK_MAKE_NONMOVABLE(HeapBase);
|
|
|
|
public:
|
|
VM& vm() { return m_vm; }
|
|
|
|
protected:
|
|
HeapBase(VM& vm)
|
|
: m_vm(vm)
|
|
{
|
|
}
|
|
|
|
VM& m_vm;
|
|
};
|
|
|
|
class HeapBlockBase {
|
|
AK_MAKE_NONMOVABLE(HeapBlockBase);
|
|
AK_MAKE_NONCOPYABLE(HeapBlockBase);
|
|
|
|
public:
|
|
static constexpr auto block_size = 16 * KiB;
|
|
static HeapBlockBase* from_cell(Cell const* cell)
|
|
{
|
|
return reinterpret_cast<HeapBlockBase*>(bit_cast<FlatPtr>(cell) & ~(HeapBlockBase::block_size - 1));
|
|
}
|
|
|
|
Heap& heap() { return m_heap; }
|
|
|
|
protected:
|
|
HeapBlockBase(Heap& heap)
|
|
: m_heap(heap)
|
|
{
|
|
}
|
|
|
|
Heap& m_heap;
|
|
};
|
|
|
|
}
|