clang 20.0.0git
Public Member Functions | Static Public Member Functions | List of all members
clang::interp::Context Class Referencefinal

Holds all information required to evaluate constexpr code in a module. More...

#include "/home/buildbot/as-worker-4/publish-doxygen-docs/llvm-project/clang/lib/AST/ByteCode/Context.h"

Public Member Functions

 Context (ASTContext &Ctx)
 Initialises the constexpr VM.
 
 ~Context ()
 Cleans up the constexpr VM.
 
bool isPotentialConstantExpr (State &Parent, const FunctionDecl *FnDecl)
 Checks if a function is a potential constant expression.
 
bool evaluateAsRValue (State &Parent, const Expr *E, APValue &Result)
 Evaluates a toplevel expression as an rvalue.
 
bool evaluate (State &Parent, const Expr *E, APValue &Result)
 Like evaluateAsRvalue(), but does no implicit lvalue-to-rvalue conversion.
 
bool evaluateAsInitializer (State &Parent, const VarDecl *VD, APValue &Result)
 Evaluates a toplevel initializer.
 
ASTContextgetASTContext () const
 Returns the AST context.
 
const LangOptionsgetLangOpts () const
 Returns the language options.
 
InterpStackgetStack ()
 Returns the interpreter stack.
 
unsigned getCharBit () const
 Returns CHAR_BIT.
 
const llvm::fltSemantics & getFloatSemantics (QualType T) const
 Return the floating-point semantics for T.
 
uint32_t getBitWidth (QualType T) const
 Return the size of T in bits.
 
std::optional< PrimTypeclassify (QualType T) const
 Classifies a type.
 
std::optional< PrimTypeclassify (const Expr *E) const
 Classifies an expression.
 
const CXXMethodDeclgetOverridingFunction (const CXXRecordDecl *DynamicDecl, const CXXRecordDecl *StaticDecl, const CXXMethodDecl *InitialFunction) const
 
const FunctiongetOrCreateFunction (const FunctionDecl *FD)
 
ProgramgetProgram () const
 Returns the program. This is only needed for unittests.
 
unsigned collectBaseOffset (const RecordDecl *BaseDecl, const RecordDecl *DerivedDecl) const
 
const RecordgetRecord (const RecordDecl *D) const
 
unsigned getEvalID () const
 

Static Public Member Functions

static bool shouldBeGloballyIndexed (const ValueDecl *VD)
 Returns whether we should create a global variable for the given ValueDecl.
 

Detailed Description

Holds all information required to evaluate constexpr code in a module.

Definition at line 40 of file Context.h.

Constructor & Destructor Documentation

◆ Context()

Context::Context ( ASTContext Ctx)

Initialises the constexpr VM.

Definition at line 24 of file Context.cpp.

◆ ~Context()

Context::~Context ( )

Cleans up the constexpr VM.

Definition at line 26 of file Context.cpp.

Member Function Documentation

◆ classify() [1/2]

std::optional< PrimType > clang::interp::Context::classify ( const Expr E) const
inline

Classifies an expression.

Definition at line 77 of file Context.h.

References classify(), E, clang::interp::PT_FnPtr, and clang::interp::PT_Ptr.

◆ classify() [2/2]

std::optional< PrimType > Context::classify ( QualType  T) const

◆ collectBaseOffset()

unsigned Context::collectBaseOffset ( const RecordDecl BaseDecl,
const RecordDecl DerivedDecl 
) const

◆ evaluate()

bool Context::evaluate ( State Parent,
const Expr E,
APValue Result 
)

Like evaluateAsRvalue(), but does no implicit lvalue-to-rvalue conversion.

Definition at line 72 of file Context.cpp.

References clang::C, clang::interp::InterpStack::clear(), E, clang::interp::InterpStack::empty(), Parent, and clang::Result.

◆ evaluateAsInitializer()

bool Context::evaluateAsInitializer ( State Parent,
const VarDecl VD,
APValue Result 
)

◆ evaluateAsRValue()

bool Context::evaluateAsRValue ( State Parent,
const Expr E,
APValue Result 
)

Evaluates a toplevel expression as an rvalue.

Definition at line 44 of file Context.cpp.

References clang::C, clang::interp::InterpStack::clear(), E, clang::interp::InterpStack::empty(), clang::Expr::isGLValue(), Parent, and clang::Result.

◆ getASTContext()

ASTContext & clang::interp::Context::getASTContext ( ) const
inline

◆ getBitWidth()

uint32_t clang::interp::Context::getBitWidth ( QualType  T) const
inline

Return the size of T in bits.

Definition at line 71 of file Context.h.

References clang::ASTContext::getIntWidth(), and clang::T.

◆ getCharBit()

unsigned Context::getCharBit ( ) const

Returns CHAR_BIT.

Definition at line 197 of file Context.cpp.

References clang::TargetInfo::getCharWidth(), and clang::ASTContext::getTargetInfo().

Referenced by clang::interp::Program::createGlobalString().

◆ getEvalID()

unsigned clang::interp::Context::getEvalID ( ) const
inline

◆ getFloatSemantics()

const llvm::fltSemantics & Context::getFloatSemantics ( QualType  T) const

Return the floating-point semantics for T.

Simple wrapper around getFloatTypeSemantics() to make code a little shorter.

Definition at line 203 of file Context.cpp.

References clang::ASTContext::getFloatTypeSemantics(), and clang::T.

◆ getLangOpts()

const LangOptions & Context::getLangOpts ( ) const

Returns the language options.

Definition at line 128 of file Context.cpp.

References clang::ASTContext::getLangOpts().

◆ getOrCreateFunction()

const Function * Context::getOrCreateFunction ( const FunctionDecl FD)

Definition at line 264 of file Context.cpp.

References clang::Func.

◆ getOverridingFunction()

const CXXMethodDecl * Context::getOverridingFunction ( const CXXRecordDecl DynamicDecl,
const CXXRecordDecl StaticDecl,
const CXXMethodDecl InitialFunction 
) const

◆ getProgram()

Program & clang::interp::Context::getProgram ( ) const
inline

Returns the program. This is only needed for unittests.

Definition at line 105 of file Context.h.

Referenced by clang::interp::MemberPointer::toFunctionPointer().

◆ getRecord()

const Record * Context::getRecord ( const RecordDecl D) const

Definition at line 312 of file Context.cpp.

References D.

Referenced by clang::interp::MemberPointer::toPointer().

◆ getStack()

InterpStack & clang::interp::Context::getStack ( )
inline

Returns the interpreter stack.

Definition at line 65 of file Context.h.

◆ isPotentialConstantExpr()

bool Context::isPotentialConstantExpr ( State Parent,
const FunctionDecl FnDecl 
)

Checks if a function is a potential constant expression.

Definition at line 28 of file Context.cpp.

References clang::interp::InterpStack::empty(), clang::Func, and Parent.

◆ shouldBeGloballyIndexed()

static bool clang::interp::Context::shouldBeGloballyIndexed ( const ValueDecl VD)
inlinestatic

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