clang 18.0.0git
|
A memory block, either on the stack or in the heap. More...
#include "/home/buildbot/as-worker-4/publish-doxygen-docs/llvm-project/clang/lib/AST/Interp/InterpBlock.h"
Public Member Functions | |
Block (const std::optional< unsigned > &DeclID, Descriptor *Desc, bool IsStatic=false, bool IsExtern=false) | |
Creates a new block. | |
Block (Descriptor *Desc, bool IsStatic=false, bool IsExtern=false) | |
const Descriptor * | getDescriptor () const |
Returns the block's descriptor. | |
bool | hasPointers () const |
Checks if the block has any live pointers. | |
bool | isExtern () const |
Checks if the block is extern. | |
bool | isStatic () const |
Checks if the block has static storage duration. | |
bool | isTemporary () const |
Checks if the block is temporary. | |
unsigned | getSize () const |
Returns the size of the block. | |
std::optional< unsigned > | getDeclID () const |
Returns the declaration ID. | |
std::byte * | data () |
Returns a pointer to the stored data. | |
const std::byte * | data () const |
std::byte * | rawData () |
Returns a pointer to the raw data, including metadata. | |
const std::byte * | rawData () const |
template<typename T > | |
T & | deref () |
Returns a view over the data. | |
void | invokeCtor () |
Invokes the constructor. | |
void | invokeDtor () |
Invokes the Destructor. | |
Protected Member Functions | |
Block (Descriptor *Desc, bool IsExtern, bool IsStatic, bool IsDead) | |
void | cleanup () |
Deletes a dead block at the end of its lifetime. | |
void | addPointer (Pointer *P) |
Pointer chain management. | |
void | removePointer (Pointer *P) |
void | replacePointer (Pointer *Old, Pointer *New) |
bool | hasPointer (const Pointer *P) const |
Protected Attributes | |
Pointer * | Pointers = nullptr |
Start of the chain of pointers. | |
std::optional< unsigned > | DeclID |
Unique identifier of the declaration. | |
bool | IsStatic = false |
Flag indicating if the block has static storage duration. | |
bool | IsExtern = false |
Flag indicating if the block is an extern. | |
bool | IsDead = false |
Flag indicating if the pointer is dead. | |
Descriptor * | Desc |
Pointer to the stack slot descriptor. | |
Friends | |
class | Pointer |
class | DeadBlock |
class | InterpState |
A memory block, either on the stack or in the heap.
The storage described by the block is immediately followed by optional metadata, which is followed by the actual data.
Block* rawData() data() │ │ │ │ │ │ ▼ ▼ ▼ ┌───────────────┬─────────────────────────┬─────────────────┐ │ Block │ Metadata │ Data │ │ sizeof(Block) │ Desc->getMetadataSize() │ Desc->getSize() │ └───────────────┴─────────────────────────┴─────────────────┘
Desc->getAllocSize() describes the size after the Block, i.e. the data size and the metadata size.
Definition at line 49 of file InterpBlock.h.
|
inline |
Creates a new block.
Definition at line 52 of file InterpBlock.h.
|
inline |
Definition at line 56 of file InterpBlock.h.
|
inlineprotected |
Definition at line 120 of file InterpBlock.h.
|
protected |
Pointer chain management.
Definition at line 19 of file InterpBlock.cpp.
References hasPointer(), IsStatic, P, and Pointers.
Referenced by clang::interp::Pointer::operator=(), and replacePointer().
|
protected |
Deletes a dead block at the end of its lifetime.
Definition at line 56 of file InterpBlock.cpp.
References IsDead, and Pointers.
Referenced by clang::interp::Pointer::operator=(), and clang::interp::Pointer::~Pointer().
|
inline |
Returns a pointer to the stored data.
You are allowed to read Desc->getSize() bytes from this address.
Definition at line 77 of file InterpBlock.h.
References Desc, clang::interp::Descriptor::getMetadataSize(), and rawData().
Referenced by clang::interp::DeadBlock::data(), clang::interp::InterpState::deallocate(), deref(), clang::interp::Pointer::elem(), invokeCtor(), and invokeDtor().
|
inline |
Definition at line 82 of file InterpBlock.h.
References Desc, clang::interp::Descriptor::getMetadataSize(), and rawData().
|
inline |
|
inline |
Returns the declaration ID.
Definition at line 73 of file InterpBlock.h.
References DeclID.
Referenced by clang::interp::Pointer::getDeclID().
|
inline |
Returns the block's descriptor.
Definition at line 61 of file InterpBlock.h.
References Desc.
Referenced by clang::interp::InterpState::deallocate().
|
inline |
Returns the size of the block.
Definition at line 71 of file InterpBlock.h.
References Desc, and clang::interp::Descriptor::getAllocSize().
Referenced by clang::interp::InterpState::deallocate().
Definition at line 85 of file InterpBlock.cpp.
References clang::C, P, and Pointers.
Referenced by addPointer(), removePointer(), and replacePointer().
|
inline |
Checks if the block has any live pointers.
Definition at line 63 of file InterpBlock.h.
References Pointers.
Referenced by clang::interp::InterpState::deallocate().
|
inline |
Invokes the constructor.
Definition at line 102 of file InterpBlock.h.
References clang::interp::Descriptor::CtorFn, data(), Desc, clang::interp::Descriptor::getAllocSize(), clang::interp::Descriptor::IsConst, clang::interp::Descriptor::IsMutable, and rawData().
Referenced by clang::interp::EvalEmitter::createLocal(), and clang::interp::InterpFrame::InterpFrame().
|
inline |
Invokes the Destructor.
Definition at line 110 of file InterpBlock.h.
References data(), Desc, and clang::interp::Descriptor::DtorFn.
|
inline |
Checks if the block is extern.
Definition at line 65 of file InterpBlock.h.
References IsExtern.
Referenced by clang::interp::Pointer::isExtern().
|
inline |
Checks if the block has static storage duration.
Definition at line 67 of file InterpBlock.h.
References IsStatic.
Referenced by clang::interp::Pointer::isStatic().
|
inline |
Checks if the block is temporary.
Definition at line 69 of file InterpBlock.h.
References Desc, and clang::interp::Descriptor::IsTemporary.
Referenced by clang::interp::Pointer::isTemporary().
|
inline |
Returns a pointer to the raw data, including metadata.
You are allowed to read Desc->getAllocSize() bytes from this address.
Definition at line 90 of file InterpBlock.h.
Referenced by data(), clang::interp::InterpState::deallocate(), clang::interp::Pointer::deref(), invokeCtor(), and clang::interp::DeadBlock::rawData().
|
inline |
Definition at line 93 of file InterpBlock.h.
|
protected |
Definition at line 36 of file InterpBlock.cpp.
References hasPointer(), IsStatic, P, and Pointers.
Referenced by clang::interp::Pointer::operator=(), replacePointer(), and clang::interp::Pointer::~Pointer().
Definition at line 61 of file InterpBlock.cpp.
References addPointer(), hasPointer(), IsStatic, Pointers, and removePointer().
Referenced by clang::interp::Pointer::operator=(), and clang::interp::Pointer::Pointer().
|
friend |
Definition at line 117 of file InterpBlock.h.
|
friend |
Definition at line 118 of file InterpBlock.h.
|
friend |
Definition at line 116 of file InterpBlock.h.
|
protected |
Unique identifier of the declaration.
Definition at line 137 of file InterpBlock.h.
Referenced by getDeclID().
|
protected |
Pointer to the stack slot descriptor.
Definition at line 145 of file InterpBlock.h.
Referenced by ctorRecord(), data(), clang::interp::Pointer::getDeclDesc(), getDescriptor(), getSize(), invokeCtor(), invokeDtor(), and isTemporary().
Flag indicating if the pointer is dead.
Definition at line 143 of file InterpBlock.h.
Referenced by cleanup(), and clang::interp::Pointer::isLive().
Flag indicating if the block is an extern.
Definition at line 141 of file InterpBlock.h.
Referenced by isExtern().
Flag indicating if the block has static storage duration.
Definition at line 139 of file InterpBlock.h.
Referenced by addPointer(), isStatic(), removePointer(), and replacePointer().
|
protected |
Start of the chain of pointers.
Definition at line 135 of file InterpBlock.h.
Referenced by addPointer(), cleanup(), clang::interp::DeadBlock::DeadBlock(), hasPointer(), hasPointers(), removePointer(), and replacePointer().