clang 20.0.0git
Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
clang::interp::EvalEmitter Class Referenceabstract

An emitter which evaluates opcodes as they are emitted. More...

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

Inheritance diagram for clang::interp::EvalEmitter:
Inheritance graph
[legend]

Public Types

using LabelTy = uint32_t
 
using AddrTy = uintptr_t
 
using Local = Scope::Local
 

Public Member Functions

EvaluationResult interpretExpr (const Expr *E, bool ConvertResultToRValue=false)
 
EvaluationResult interpretDecl (const VarDecl *VD, bool CheckFullyInitialized)
 
void cleanup ()
 Clean up all resources.
 
InterpStategetState ()
 
- Public Member Functions inherited from clang::interp::SourceMapper
virtual ~SourceMapper ()
 
virtual SourceInfo getSource (const Function *F, CodePtr PC) const =0
 Returns source information for a given PC in a function.
 
const ExprgetExpr (const Function *F, CodePtr PC) const
 Returns the expression if an opcode belongs to one, null otherwise.
 
SourceLocation getLocation (const Function *F, CodePtr PC) const
 Returns the location from which an opcode originates.
 
SourceRange getRange (const Function *F, CodePtr PC) const
 

Protected Member Functions

 EvalEmitter (Context &Ctx, Program &P, State &Parent, InterpStack &Stk)
 
virtual ~EvalEmitter ()
 
void emitLabel (LabelTy Label)
 Define a label.
 
LabelTy getLabel ()
 Create a label.
 
virtual bool visitExpr (const Expr *E)=0
 Methods implemented by the compiler.
 
virtual bool visitDeclAndReturn (const VarDecl *VD, bool ConstantContext)=0
 
virtual bool visitFunc (const FunctionDecl *F)=0
 
bool jumpTrue (const LabelTy &Label)
 Emits jumps.
 
bool jumpFalse (const LabelTy &Label)
 
bool jump (const LabelTy &Label)
 
bool fallthrough (const LabelTy &Label)
 
bool isActive () const
 Since expressions can only jump forward, predicated execution is used to deal with if-else statements.
 
Local createLocal (Descriptor *D)
 Callback for registering a local.
 
SourceInfo getSource (const Function *F, CodePtr PC) const override
 Returns the source location of the current opcode.
 

Protected Attributes

llvm::DenseMap< const ParmVarDecl *, ParamOffsetParams
 Parameter indices.
 
llvm::DenseMap< const ValueDecl *, ParamOffsetLambdaCaptures
 Lambda captures.
 
ParamOffset LambdaThisCapture {0, false}
 Offset of the This parameter in a lambda record.
 
llvm::SmallVector< SmallVector< Local, 8 >, 2 > Descriptors
 Local descriptors.
 

Detailed Description

An emitter which evaluates opcodes as they are emitted.

Definition at line 31 of file EvalEmitter.h.

Member Typedef Documentation

◆ AddrTy

Definition at line 34 of file EvalEmitter.h.

◆ LabelTy

Definition at line 33 of file EvalEmitter.h.

◆ Local

Definition at line 35 of file EvalEmitter.h.

Constructor & Destructor Documentation

◆ EvalEmitter()

EvalEmitter::EvalEmitter ( Context Ctx,
Program P,
State Parent,
InterpStack Stk 
)
protected

Definition at line 19 of file EvalEmitter.cpp.

References clang::interp::InterpState::Current.

◆ ~EvalEmitter()

EvalEmitter::~EvalEmitter ( )
protectedvirtual

Member Function Documentation

◆ cleanup()

void EvalEmitter::cleanup ( )

Clean up all resources.

Clean up all our resources.

This needs to done in failed evaluations before we call InterpStack::clear(), because there might be a Pointer on the stack pointing into a Block in the EvalEmitter.

Definition at line 38 of file EvalEmitter.cpp.

References clang::interp::InterpState::cleanup().

◆ createLocal()

Scope::Local EvalEmitter::createLocal ( Descriptor D)
protected

◆ emitLabel()

void EvalEmitter::emitLabel ( LabelTy  Label)
protected

Define a label.

Definition at line 79 of file EvalEmitter.cpp.

References Label.

◆ fallthrough()

bool EvalEmitter::fallthrough ( const LabelTy Label)
protected

Definition at line 127 of file EvalEmitter.cpp.

References isActive(), and Label.

◆ getLabel()

EvalEmitter::LabelTy EvalEmitter::getLabel ( )
protected

Create a label.

Definition at line 81 of file EvalEmitter.cpp.

◆ getSource()

SourceInfo clang::interp::EvalEmitter::getSource ( const Function F,
CodePtr  PC 
) const
inlineoverrideprotectedvirtual

Returns the source location of the current opcode.

Implements clang::interp::SourceMapper.

Definition at line 75 of file EvalEmitter.h.

References clang::interp::Function::getSource(), and clang::interp::Function::hasBody().

◆ getState()

InterpState & clang::interp::EvalEmitter::getState ( )
inline

Definition at line 44 of file EvalEmitter.h.

◆ interpretDecl()

EvaluationResult EvalEmitter::interpretDecl ( const VarDecl VD,
bool  CheckFullyInitialized 
)

◆ interpretExpr()

EvaluationResult EvalEmitter::interpretExpr ( const Expr E,
bool  ConvertResultToRValue = false 
)

◆ isActive()

bool clang::interp::EvalEmitter::isActive ( ) const
inlineprotected

Since expressions can only jump forward, predicated execution is used to deal with if-else statements.

Definition at line 69 of file EvalEmitter.h.

Referenced by fallthrough(), jump(), jumpFalse(), and jumpTrue().

◆ jump()

bool EvalEmitter::jump ( const LabelTy Label)
protected

Definition at line 121 of file EvalEmitter.cpp.

References isActive(), and Label.

◆ jumpFalse()

bool EvalEmitter::jumpFalse ( const LabelTy Label)
protected

◆ jumpTrue()

bool EvalEmitter::jumpTrue ( const LabelTy Label)
protected

Emits jumps.

Definition at line 105 of file EvalEmitter.cpp.

References isActive(), Label, clang::interp::InterpStack::pop(), and clang::interp::InterpState::Stk.

◆ visitDeclAndReturn()

virtual bool clang::interp::EvalEmitter::visitDeclAndReturn ( const VarDecl VD,
bool  ConstantContext 
)
protectedpure virtual

Referenced by interpretDecl().

◆ visitExpr()

virtual bool clang::interp::EvalEmitter::visitExpr ( const Expr E)
protectedpure virtual

Methods implemented by the compiler.

Referenced by interpretExpr().

◆ visitFunc()

virtual bool clang::interp::EvalEmitter::visitFunc ( const FunctionDecl F)
protectedpure virtual

Member Data Documentation

◆ Descriptors

llvm::SmallVector<SmallVector<Local, 8>, 2> clang::interp::EvalEmitter::Descriptors
protected

Local descriptors.

Definition at line 86 of file EvalEmitter.h.

◆ LambdaCaptures

llvm::DenseMap<const ValueDecl *, ParamOffset> clang::interp::EvalEmitter::LambdaCaptures
protected

Lambda captures.

Definition at line 82 of file EvalEmitter.h.

◆ LambdaThisCapture

ParamOffset clang::interp::EvalEmitter::LambdaThisCapture {0, false}
protected

Offset of the This parameter in a lambda record.

Definition at line 84 of file EvalEmitter.h.

◆ Params

llvm::DenseMap<const ParmVarDecl *, ParamOffset> clang::interp::EvalEmitter::Params
protected

Parameter indices.

Definition at line 80 of file EvalEmitter.h.


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