clang 18.0.0git
|
Describes a memory block created by an allocation site. More...
#include "/home/buildbot/as-worker-4/publish-doxygen-docs/llvm-project/clang/lib/AST/Interp/Descriptor.h"
Classes | |
struct | UnknownSize |
Token to denote structures of unknown size. More... | |
Public Types | |
using | MetadataSize = std::optional< unsigned > |
Public Member Functions | |
Descriptor (const DeclTy &D, PrimType Type, MetadataSize MD, bool IsConst, bool IsTemporary, bool IsMutable) | |
Allocates a descriptor for a primitive. | |
Descriptor (const DeclTy &D, PrimType Type, MetadataSize MD, size_t NumElems, bool IsConst, bool IsTemporary, bool IsMutable) | |
Allocates a descriptor for an array of primitives. | |
Descriptor (const DeclTy &D, PrimType Type, bool IsTemporary, UnknownSize) | |
Allocates a descriptor for an array of primitives of unknown size. | |
Descriptor (const DeclTy &D, const Descriptor *Elem, MetadataSize MD, unsigned NumElems, bool IsConst, bool IsTemporary, bool IsMutable) | |
Allocates a descriptor for an array of composites. | |
Descriptor (const DeclTy &D, Descriptor *Elem, bool IsTemporary, UnknownSize) | |
Allocates a descriptor for an array of composites of unknown size. | |
Descriptor (const DeclTy &D, Record *R, MetadataSize MD, bool IsConst, bool IsTemporary, bool IsMutable) | |
Allocates a descriptor for a record. | |
Descriptor (const DeclTy &D, MetadataSize MD) | |
QualType | getType () const |
QualType | getElemQualType () const |
SourceLocation | getLocation () const |
const Decl * | asDecl () const |
const Expr * | asExpr () const |
const ValueDecl * | asValueDecl () const |
const FieldDecl * | asFieldDecl () const |
const RecordDecl * | asRecordDecl () const |
unsigned | getSize () const |
Returns the size of the object without metadata. | |
unsigned | getAllocSize () const |
Returns the allocated size, including metadata. | |
unsigned | getElemSize () const |
returns the size of an element when the structure is viewed as an array. | |
unsigned | getMetadataSize () const |
Returns the size of the metadata. | |
unsigned | getNumElems () const |
Returns the number of elements stored in the block. | |
bool | isPrimitiveArray () const |
Checks if the descriptor is of an array of primitives. | |
bool | isCompositeArray () const |
Checks if the descriptor is of an array of composites. | |
bool | isZeroSizeArray () const |
Checks if the descriptor is of an array of zero size. | |
bool | isUnknownSizeArray () const |
Checks if the descriptor is of an array of unknown size. | |
bool | isPrimitive () const |
Checks if the descriptor is of a primitive. | |
bool | isArray () const |
Checks if the descriptor is of an array. | |
bool | isRecord () const |
Checks if the descriptor is of a record. | |
bool | isDummy () const |
Checks if this is a dummy descriptor. | |
Public Attributes | |
Record *const | ElemRecord = nullptr |
Pointer to the record, if block contains records. | |
const Descriptor *const | ElemDesc = nullptr |
Descriptor of the array element. | |
const bool | IsConst = false |
Flag indicating if the block is mutable. | |
const bool | IsMutable = false |
Flag indicating if a field is mutable. | |
const bool | IsTemporary = false |
Flag indicating if the block is a temporary. | |
const bool | IsArray = false |
Flag indicating if the block is an array. | |
const bool | IsDummy = false |
Flag indicating if this is a dummy descriptor. | |
const BlockCtorFn | CtorFn = nullptr |
Storage management methods. | |
const BlockDtorFn | DtorFn = nullptr |
const BlockMoveFn | MoveFn = nullptr |
Static Public Attributes | |
static constexpr MetadataSize | InlineDescMD = sizeof(InlineDescriptor) |
Describes a memory block created by an allocation site.
Definition at line 79 of file Descriptor.h.
using clang::interp::Descriptor::MetadataSize = std::optional<unsigned> |
Definition at line 99 of file Descriptor.h.
Descriptor::Descriptor | ( | const DeclTy & | D, |
PrimType | Type, | ||
MetadataSize | MD, | ||
size_t | NumElems, | ||
bool | IsConst, | ||
bool | IsTemporary, | ||
bool | IsMutable | ||
) |
Allocates a descriptor for an array of primitives.
Primitive arrays.
Definition at line 241 of file Descriptor.cpp.
Descriptor::Descriptor | ( | const DeclTy & | D, |
PrimType | Type, | ||
bool | IsTemporary, | ||
UnknownSize | |||
) |
Allocates a descriptor for an array of primitives of unknown size.
Primitive unknown-size arrays.
Definition at line 254 of file Descriptor.cpp.
Descriptor::Descriptor | ( | const DeclTy & | D, |
const Descriptor * | Elem, | ||
MetadataSize | MD, | ||
unsigned | NumElems, | ||
bool | IsConst, | ||
bool | IsTemporary, | ||
bool | IsMutable | ||
) |
Allocates a descriptor for an array of composites.
Arrays of composite elements.
Definition at line 265 of file Descriptor.cpp.
Descriptor::Descriptor | ( | const DeclTy & | D, |
Descriptor * | Elem, | ||
bool | IsTemporary, | ||
UnknownSize | |||
) |
Allocates a descriptor for an array of composites of unknown size.
Unknown-size arrays of composite elements.
Definition at line 278 of file Descriptor.cpp.
Descriptor::Descriptor | ( | const DeclTy & | D, |
Record * | R, | ||
MetadataSize | MD, | ||
bool | IsConst, | ||
bool | IsTemporary, | ||
bool | IsMutable | ||
) |
Allocates a descriptor for a record.
Composite records.
Definition at line 289 of file Descriptor.cpp.
Descriptor::Descriptor | ( | const DeclTy & | D, |
MetadataSize | MD | ||
) |
Definition at line 299 of file Descriptor.cpp.
|
inline |
Definition at line 150 of file Descriptor.h.
Referenced by asFieldDecl(), asRecordDecl(), asValueDecl(), clang::interp::CheckFieldsInitialized(), getType(), and clang::interp::Pointer::toAPValue().
|
inline |
Definition at line 151 of file Descriptor.h.
Referenced by getType(), and clang::interp::Pointer::toAPValue().
|
inline |
Definition at line 157 of file Descriptor.h.
References asDecl().
Referenced by clang::interp::Pointer::getField().
|
inline |
Definition at line 161 of file Descriptor.h.
References asDecl().
|
inline |
Definition at line 153 of file Descriptor.h.
References asDecl().
Referenced by clang::interp::CheckExtern(), getType(), and clang::interp::Pointer::toAPValue().
|
inline |
Returns the allocated size, including metadata.
Definition at line 172 of file Descriptor.h.
Referenced by clang::interp::Program::createDescriptor(), clang::interp::Program::createGlobalString(), clang::interp::ByteCodeEmitter::createLocal(), clang::interp::EvalEmitter::createLocal(), ctorArrayDesc(), dtorArrayDesc(), clang::interp::Program::getOrCreateDummy(), clang::interp::Program::getOrCreateRecord(), clang::interp::Block::getSize(), clang::interp::Block::invokeCtor(), and moveArrayDesc().
QualType Descriptor::getElemQualType | ( | ) | const |
Definition at line 316 of file Descriptor.cpp.
|
inline |
returns the size of an element when the structure is viewed as an array.
Definition at line 174 of file Descriptor.h.
Referenced by clang::interp::Pointer::elemSize(), and getNumElems().
SourceLocation Descriptor::getLocation | ( | ) | const |
Definition at line 322 of file Descriptor.cpp.
Referenced by clang::interp::Pointer::getDeclLoc().
|
inline |
Returns the size of the metadata.
Definition at line 176 of file Descriptor.h.
Referenced by clang::interp::Block::data(), and clang::interp::InterpState::deallocate().
|
inline |
Returns the number of elements stored in the block.
Definition at line 179 of file Descriptor.h.
References getElemSize(), and getSize().
Referenced by ctorArrayDesc(), ctorArrayTy(), dtorArrayDesc(), dtorArrayTy(), clang::interp::Pointer::initialize(), moveArrayDesc(), and moveArrayTy().
|
inline |
Returns the size of the object without metadata.
Definition at line 166 of file Descriptor.h.
References isUnknownSizeArray().
Referenced by clang::interp::Pointer::elemSize(), getNumElems(), and clang::interp::Pointer::getSize().
QualType Descriptor::getType | ( | ) | const |
Definition at line 306 of file Descriptor.cpp.
References asDecl(), asExpr(), and asValueDecl().
Referenced by clang::interp::CallVirt(), CheckTemporary(), getElemQualType(), clang::interp::Pointer::getType(), and clang::interp::ByteCodeExprGen< Emitter >::VisitDeclRefExpr().
|
inline |
Checks if the descriptor is of an array.
Definition at line 196 of file Descriptor.h.
References IsArray.
Referenced by getElemQualType().
|
inline |
Checks if the descriptor is of an array of composites.
Definition at line 186 of file Descriptor.h.
|
inline |
Checks if this is a dummy descriptor.
Definition at line 200 of file Descriptor.h.
References IsDummy.
Referenced by clang::interp::Pointer::isDummy().
|
inline |
Checks if the descriptor is of a primitive.
Definition at line 193 of file Descriptor.h.
References ElemRecord, and IsArray.
|
inline |
Checks if the descriptor is of an array of primitives.
Definition at line 184 of file Descriptor.h.
References ElemDesc, and IsArray.
Referenced by clang::interp::Pointer::initialize(), clang::interp::Pointer::inPrimitiveArray(), clang::interp::interp__builtin_nan(), clang::interp::interp__builtin_strcmp(), clang::interp::interp__builtin_strlen(), and clang::interp::Pointer::isInitialized().
|
inline |
Checks if the descriptor is of a record.
Definition at line 198 of file Descriptor.h.
References ElemRecord, and IsArray.
|
inline |
Checks if the descriptor is of an array of unknown size.
Definition at line 190 of file Descriptor.h.
Referenced by getSize(), and clang::interp::Pointer::isUnknownSizeArray().
|
inline |
Checks if the descriptor is of an array of zero size.
Definition at line 188 of file Descriptor.h.
const BlockCtorFn clang::interp::Descriptor::CtorFn = nullptr |
Storage management methods.
Definition at line 118 of file Descriptor.h.
Referenced by ctorArrayDesc(), and clang::interp::Block::invokeCtor().
const BlockDtorFn clang::interp::Descriptor::DtorFn = nullptr |
Definition at line 119 of file Descriptor.h.
Referenced by dtorArrayDesc(), and clang::interp::Block::invokeDtor().
const Descriptor* const clang::interp::Descriptor::ElemDesc = nullptr |
Descriptor of the array element.
Definition at line 105 of file Descriptor.h.
Referenced by ctorArrayDesc(), dtorArrayDesc(), clang::interp::Pointer::getElemRecord(), isCompositeArray(), isPrimitiveArray(), and moveArrayDesc().
Record* const clang::interp::Descriptor::ElemRecord = nullptr |
Pointer to the record, if block contains records.
Definition at line 103 of file Descriptor.h.
Referenced by ctorRecord(), dtorRecord(), clang::interp::Pointer::getElemRecord(), clang::interp::Pointer::getRecord(), isPrimitive(), isRecord(), and moveRecord().
|
staticconstexpr |
Definition at line 100 of file Descriptor.h.
Referenced by clang::interp::ByteCodeExprGen< Emitter >::allocateLocal(), and clang::interp::ByteCodeExprGen< Emitter >::allocateLocalPrimitive().
Flag indicating if the block is an array.
Definition at line 113 of file Descriptor.h.
Referenced by clang::interp::Pointer::expand(), clang::interp::Pointer::hasSameArray(), clang::interp::Pointer::inArray(), isArray(), isCompositeArray(), isPrimitive(), isPrimitiveArray(), and isRecord().
Flag indicating if the block is mutable.
Definition at line 107 of file Descriptor.h.
Referenced by ctorArrayDesc(), clang::interp::Block::invokeCtor(), and clang::interp::Pointer::isConst().
Flag indicating if this is a dummy descriptor.
Definition at line 115 of file Descriptor.h.
Referenced by isDummy().
Flag indicating if a field is mutable.
Definition at line 109 of file Descriptor.h.
Referenced by ctorArrayDesc(), and clang::interp::Block::invokeCtor().
Flag indicating if the block is a temporary.
Definition at line 111 of file Descriptor.h.
Referenced by clang::interp::Block::isTemporary().
const BlockMoveFn clang::interp::Descriptor::MoveFn = nullptr |
Definition at line 120 of file Descriptor.h.
Referenced by clang::interp::InterpState::deallocate(), and moveArrayDesc().