clang 17.0.0git
Classes | Public Types | Public Member Functions | Public Attributes | Static Public Attributes | List of all members
clang::interp::Descriptor Struct Referencefinal

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"

Collaboration diagram for clang::interp::Descriptor:
Collaboration graph
[legend]

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, 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.
 
QualType getType () const
 
SourceLocation getLocation () const
 
const DeclasDecl () const
 
const ExprasExpr () const
 
const ValueDeclasValueDecl () const
 
const FieldDeclasFieldDecl () const
 
const RecordDeclasRecordDecl () 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 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.
 

Public Attributes

Record *const ElemRecord = nullptr
 Pointer to the record, if block contains records.
 
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 BlockCtorFn CtorFn = nullptr
 Storage management methods.
 
const BlockDtorFn DtorFn = nullptr
 
const BlockMoveFn MoveFn = nullptr
 

Static Public Attributes

static constexpr MetadataSize InlineDescMD = sizeof(InlineDescriptor)
 

Detailed Description

Describes a memory block created by an allocation site.

Definition at line 76 of file Descriptor.h.

Member Typedef Documentation

◆ MetadataSize

Definition at line 96 of file Descriptor.h.

Constructor & Destructor Documentation

◆ Descriptor() [1/6]

Descriptor::Descriptor ( const DeclTy D,
PrimType  Type,
MetadataSize  MD,
bool  IsConst,
bool  IsTemporary,
bool  IsMutable 
)

Allocates a descriptor for a primitive.

Definition at line 203 of file Descriptor.cpp.

◆ Descriptor() [2/6]

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.

Definition at line 213 of file Descriptor.cpp.

◆ Descriptor() [3/6]

Descriptor::Descriptor ( const DeclTy D,
PrimType  Type,
bool  IsTemporary,
UnknownSize   
)

Allocates a descriptor for an array of primitives of unknown size.

Definition at line 225 of file Descriptor.cpp.

◆ Descriptor() [4/6]

Descriptor::Descriptor ( const DeclTy D,
Descriptor Elem,
MetadataSize  MD,
unsigned  NumElems,
bool  IsConst,
bool  IsTemporary,
bool  IsMutable 
)

Allocates a descriptor for an array of composites.

Definition at line 234 of file Descriptor.cpp.

◆ Descriptor() [5/6]

Descriptor::Descriptor ( const DeclTy D,
Descriptor Elem,
bool  IsTemporary,
UnknownSize   
)

Allocates a descriptor for an array of composites of unknown size.

Definition at line 246 of file Descriptor.cpp.

◆ Descriptor() [6/6]

Descriptor::Descriptor ( const DeclTy D,
Record R,
MetadataSize  MD,
bool  IsConst,
bool  IsTemporary,
bool  IsMutable 
)

Allocates a descriptor for a record.

Definition at line 256 of file Descriptor.cpp.

Member Function Documentation

◆ asDecl()

const Decl * clang::interp::Descriptor::asDecl ( ) const
inline

◆ asExpr()

const Expr * clang::interp::Descriptor::asExpr ( ) const
inline

Definition at line 143 of file Descriptor.h.

Referenced by getType(), and clang::interp::Pointer::toAPValue().

◆ asFieldDecl()

const FieldDecl * clang::interp::Descriptor::asFieldDecl ( ) const
inline

Definition at line 149 of file Descriptor.h.

References asDecl().

Referenced by clang::interp::Pointer::getField().

◆ asRecordDecl()

const RecordDecl * clang::interp::Descriptor::asRecordDecl ( ) const
inline

Definition at line 153 of file Descriptor.h.

References asDecl().

◆ asValueDecl()

const ValueDecl * clang::interp::Descriptor::asValueDecl ( ) const
inline

Definition at line 145 of file Descriptor.h.

References asDecl().

Referenced by clang::interp::CheckExtern(), getType(), and clang::interp::Pointer::toAPValue().

◆ getAllocSize()

unsigned clang::interp::Descriptor::getAllocSize ( ) const
inline

◆ getElemSize()

unsigned clang::interp::Descriptor::getElemSize ( ) const
inline

returns the size of an element when the structure is viewed as an array.

Definition at line 166 of file Descriptor.h.

Referenced by clang::interp::Pointer::elemSize(), and getNumElems().

◆ getLocation()

SourceLocation Descriptor::getLocation ( ) const

◆ getMetadataSize()

unsigned clang::interp::Descriptor::getMetadataSize ( ) const
inline

Returns the size of the metadata.

Definition at line 168 of file Descriptor.h.

Referenced by clang::interp::Block::data().

◆ getNumElems()

unsigned clang::interp::Descriptor::getNumElems ( ) const
inline

Returns the number of elements stored in the block.

Definition at line 171 of file Descriptor.h.

References getElemSize(), and getSize().

Referenced by ctorArrayDesc(), ctorArrayTy(), dtorArrayDesc(), dtorArrayTy(), clang::interp::Pointer::initialize(), moveArrayDesc(), and moveArrayTy().

◆ getSize()

unsigned clang::interp::Descriptor::getSize ( ) const
inline

Returns the size of the object without metadata.

Definition at line 158 of file Descriptor.h.

References isUnknownSizeArray().

Referenced by clang::interp::Pointer::elemSize(), getNumElems(), and clang::interp::Pointer::getSize().

◆ getType()

QualType Descriptor::getType ( ) const

Definition at line 266 of file Descriptor.cpp.

References asExpr(), and asValueDecl().

Referenced by CheckTemporary(), and clang::interp::Pointer::getType().

◆ isArray()

bool clang::interp::Descriptor::isArray ( ) const
inline

Checks if the descriptor is of an array.

Definition at line 186 of file Descriptor.h.

References IsArray.

◆ isPrimitive()

bool clang::interp::Descriptor::isPrimitive ( ) const
inline

Checks if the descriptor is of a primitive.

Definition at line 183 of file Descriptor.h.

References ElemRecord, and IsArray.

◆ isPrimitiveArray()

bool clang::interp::Descriptor::isPrimitiveArray ( ) const
inline

Checks if the descriptor is of an array of primitives.

Definition at line 176 of file Descriptor.h.

References ElemDesc, and IsArray.

Referenced by clang::interp::Pointer::initialize(), clang::interp::Pointer::inPrimitiveArray(), and clang::interp::Pointer::isInitialized().

◆ isUnknownSizeArray()

bool clang::interp::Descriptor::isUnknownSizeArray ( ) const
inline

Checks if the descriptor is of an array of unknown size.

Definition at line 180 of file Descriptor.h.

Referenced by getSize(), and clang::interp::Pointer::isUnknownSizeArray().

◆ isZeroSizeArray()

bool clang::interp::Descriptor::isZeroSizeArray ( ) const
inline

Checks if the descriptor is of an array of zero size.

Definition at line 178 of file Descriptor.h.

Member Data Documentation

◆ CtorFn

const BlockCtorFn clang::interp::Descriptor::CtorFn = nullptr

Storage management methods.

Definition at line 113 of file Descriptor.h.

Referenced by ctorArrayDesc(), and clang::interp::Block::invokeCtor().

◆ DtorFn

const BlockDtorFn clang::interp::Descriptor::DtorFn = nullptr

◆ ElemDesc

Descriptor* const clang::interp::Descriptor::ElemDesc = nullptr

◆ ElemRecord

Record* const clang::interp::Descriptor::ElemRecord = nullptr

Pointer to the record, if block contains records.

Definition at line 100 of file Descriptor.h.

Referenced by ctorRecord(), dtorRecord(), clang::interp::Pointer::getElemRecord(), clang::interp::Pointer::getRecord(), isPrimitive(), and moveRecord().

◆ InlineDescMD

constexpr MetadataSize clang::interp::Descriptor::InlineDescMD = sizeof(InlineDescriptor)
staticconstexpr

◆ IsArray

const bool clang::interp::Descriptor::IsArray = false

◆ IsConst

const bool clang::interp::Descriptor::IsConst = false

Flag indicating if the block is mutable.

Definition at line 104 of file Descriptor.h.

Referenced by ctorArrayDesc(), clang::interp::Block::invokeCtor(), and clang::interp::Pointer::isConst().

◆ IsMutable

const bool clang::interp::Descriptor::IsMutable = false

Flag indicating if a field is mutable.

Definition at line 106 of file Descriptor.h.

Referenced by ctorArrayDesc(), and clang::interp::Block::invokeCtor().

◆ IsTemporary

const bool clang::interp::Descriptor::IsTemporary = false

Flag indicating if the block is a temporary.

Definition at line 108 of file Descriptor.h.

Referenced by clang::interp::Block::isTemporary().

◆ MoveFn

const BlockMoveFn clang::interp::Descriptor::MoveFn = nullptr

Definition at line 115 of file Descriptor.h.

Referenced by clang::interp::InterpState::deallocate(), and moveArrayDesc().


The documentation for this struct was generated from the following files: