clang
19.0.0git
|
An emitter which evaluates opcodes as they are emitted. More...
#include "/home/runner/work/llvm/llvm/repo/clang/lib/AST/Interp/EvalEmitter.h"
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) |
InterpState & | getState () |
Public Member Functions inherited from clang::interp::SourceMapper | |
virtual | ~SourceMapper () |
const Expr * | getExpr (const Function *F, CodePtr PC) const |
Returns the expression if an opcode belongs to one, null otherwise. More... | |
SourceLocation | getLocation (const Function *F, CodePtr PC) const |
Returns the location from which an opcode originates. More... | |
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. More... | |
LabelTy | getLabel () |
Create a label. More... | |
virtual bool | visitExpr (const Expr *E)=0 |
Methods implemented by the compiler. More... | |
virtual bool | visitDecl (const VarDecl *VD)=0 |
bool | jumpTrue (const LabelTy &Label) |
Emits jumps. More... | |
bool | jumpFalse (const LabelTy &Label) |
bool | jump (const LabelTy &Label) |
bool | fallthrough (const LabelTy &Label) |
Local | createLocal (Descriptor *D) |
Callback for registering a local. More... | |
SourceInfo | getSource (const Function *F, CodePtr PC) const override |
Returns the source location of the current opcode. More... | |
Protected Attributes | |
llvm::DenseMap< const ParmVarDecl *, ParamOffset > | Params |
Parameter indices. More... | |
llvm::DenseMap< const ValueDecl *, ParamOffset > | LambdaCaptures |
Lambda captures. More... | |
ParamOffset | LambdaThisCapture {0, false} |
Offset of the This parameter in a lambda record. More... | |
llvm::SmallVector< SmallVector< Local, 8 >, 2 > | Descriptors |
Local descriptors. More... | |
An emitter which evaluates opcodes as they are emitted.
Definition at line 31 of file EvalEmitter.h.
Definition at line 34 of file EvalEmitter.h.
using clang::interp::EvalEmitter::LabelTy = uint32_t |
Definition at line 33 of file EvalEmitter.h.
Definition at line 35 of file EvalEmitter.h.
|
protected |
Definition at line 19 of file EvalEmitter.cpp.
|
protectedvirtual |
Definition at line 27 of file EvalEmitter.cpp.
References clang::interp::Block::invokeDtor(), clang::interp::Block::isInitialized(), and V.
|
protected |
Callback for registering a local.
Definition at line 71 of file EvalEmitter.cpp.
References clang::interp::InlineDescriptor::Desc, clang::interp::Descriptor::getAllocSize(), clang::interp::Block::invokeCtor(), clang::interp::InlineDescriptor::IsActive, clang::interp::InlineDescriptor::IsBase, clang::interp::InlineDescriptor::IsConst, clang::interp::InlineDescriptor::IsFieldMutable, clang::interp::InlineDescriptor::IsInitialized, and clang::interp::InlineDescriptor::Offset.
|
protected |
Definition at line 115 of file EvalEmitter.cpp.
References Label.
|
protected |
Create a label.
Definition at line 69 of file EvalEmitter.cpp.
|
inlineoverrideprotectedvirtual |
Returns the source location of the current opcode.
Implements clang::interp::SourceMapper.
Definition at line 67 of file EvalEmitter.h.
References clang::interp::Function::getSource(), and clang::interp::Function::hasBody().
|
inline |
Definition at line 41 of file EvalEmitter.h.
EvaluationResult EvalEmitter::interpretDecl | ( | const VarDecl * | VD, |
bool | CheckFullyInitialized | ||
) |
Definition at line 50 of file EvalEmitter.cpp.
References clang::interp::EvaluationResult::empty(), clang::VarDecl::getAnyInitializer(), clang::Expr::getType(), clang::Type::isAnyComplexType(), clang::Type::isVectorType(), and visitDecl().
EvaluationResult EvalEmitter::interpretExpr | ( | const Expr * | E, |
bool | ConvertResultToRValue = false |
||
) |
Definition at line 35 of file EvalEmitter.cpp.
References clang::Expr::getExprLoc(), clang::interp::InterpState::setEvalLocation(), and visitExpr().
Definition at line 109 of file EvalEmitter.cpp.
References Label.
Definition at line 101 of file EvalEmitter.cpp.
References Label, clang::interp::InterpStack::pop(), and clang::interp::InterpState::Stk.
Emits jumps.
Definition at line 93 of file EvalEmitter.cpp.
References Label, clang::interp::InterpStack::pop(), and clang::interp::InterpState::Stk.
Referenced by interpretDecl().
Methods implemented by the compiler.
Referenced by interpretExpr().
|
protected |
Local descriptors.
Definition at line 78 of file EvalEmitter.h.
|
protected |
Lambda captures.
Definition at line 74 of file EvalEmitter.h.
|
protected |
Offset of the This parameter in a lambda record.
Definition at line 76 of file EvalEmitter.h.
|
protected |
Parameter indices.
Definition at line 72 of file EvalEmitter.h.