27 assert(!hasPointer(
P));
35 assert(hasPointer(
P));
39void Block::removePointer(
Pointer *
P) {
40 assert(
P->isBlockPointer());
48 assert(hasPointer(
P));
55 P->Prev->Next =
P->Next;
57 P->Next->Prev =
P->Prev;
58 P->PointeeStorage.BS.Pointee =
nullptr;
60 assert(!hasPointer(
P));
64void Block::cleanup() {
65 if (Pointers ==
nullptr && IsDead)
66 (
reinterpret_cast<DeadBlock *
>(
this + 1) - 1)->free();
78 assert(hasPointer(Old));
87 assert(!hasPointer(Old));
88 assert(hasPointer(New));
93bool Block::hasPointer(
const Pointer *
P)
const {
103 : Root(Root), B(~0u, Blk->Desc, Blk->
IsStatic, Blk->IsExtern, Blk->IsWeak,
113 B.IsDynamic = Blk->IsDynamic;
116 B.Pointers = Blk->Pointers;
118 P->PointeeStorage.BS.Pointee = &B;
119 Blk->Pointers =
nullptr;
122void DeadBlock::free() {
A memory block, either on the stack or in the heap.
void invokeDtor()
Invokes the Destructor.
Descriptor for a dead block.
DeadBlock(DeadBlock *&Root, Block *Blk)
Copies the block.
A pointer to a memory block, live or dead.
The JSON file list parser is used to communicate input to InstallAPI.
Block * Pointee
The block the pointer is pointing to.