clang 17.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) | |
Block (Descriptor *Desc, bool IsStatic=false, bool IsExtern=false) | |
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. | |
char * | data () |
Returns a pointer to the stored data. | |
const char * | data () const |
char * | rawData () |
Returns a pointer to the raw data, including metadata. | |
const char * | rawData () const |
template<typename T > | |
T & | deref () |
Returns a view over the data. | |
void | invokeCtor () |
Invokes the constructor. | |
void | invokeDtor () |
Protected Member Functions | |
Block (Descriptor *Desc, bool IsExtern, bool IsStatic, bool IsDead) | |
void | cleanup () |
void | addPointer (Pointer *P) |
void | removePointer (Pointer *P) |
void | movePointer (Pointer *From, Pointer *To) |
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 |
Definition at line 52 of file InterpBlock.h.
|
inline |
Definition at line 56 of file InterpBlock.h.
|
inlineprotected |
Definition at line 118 of file InterpBlock.h.
|
protected |
Definition at line 21 of file InterpBlock.cpp.
References IsStatic, P, and Pointers.
Referenced by clang::interp::Pointer::operator=().
|
protected |
Definition at line 42 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(), 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(), and clang::interp::Pointer::print().
|
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 100 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 |
Definition at line 108 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().
Definition at line 47 of file InterpBlock.cpp.
References IsStatic, and Pointers.
Referenced by clang::interp::Pointer::operator=(), and clang::interp::Pointer::Pointer().
|
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::Pointer::deref(), clang::interp::Pointer::elem(), and invokeCtor().
|
inline |
Definition at line 91 of file InterpBlock.h.
|
protected |
Definition at line 31 of file InterpBlock.cpp.
References IsStatic, P, and Pointers.
Referenced by clang::interp::Pointer::operator=(), and clang::interp::Pointer::~Pointer().
|
friend |
Definition at line 115 of file InterpBlock.h.
|
friend |
Definition at line 116 of file InterpBlock.h.
|
friend |
Definition at line 114 of file InterpBlock.h.
|
protected |
Unique identifier of the declaration.
Definition at line 132 of file InterpBlock.h.
Referenced by getDeclID().
|
protected |
Pointer to the stack slot descriptor.
Definition at line 140 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 138 of file InterpBlock.h.
Referenced by cleanup(), and clang::interp::Pointer::isLive().
Flag indicating if the block is an extern.
Definition at line 136 of file InterpBlock.h.
Referenced by isExtern().
Flag indicating if the block has static storage duration.
Definition at line 134 of file InterpBlock.h.
Referenced by addPointer(), isStatic(), movePointer(), and removePointer().
|
protected |
Start of the chain of pointers.
Definition at line 130 of file InterpBlock.h.
Referenced by addPointer(), cleanup(), clang::interp::DeadBlock::DeadBlock(), hasPointers(), movePointer(), and removePointer().