#include "Compiler.h"
#include "ByteCodeEmitter.h"
#include "Context.h"
#include "FixedPoint.h"
#include "Floating.h"
#include "Function.h"
#include "InterpShared.h"
#include "PrimType.h"
#include "Program.h"
#include "clang/AST/Attr.h"
usingnamespaceclang;
usingnamespaceclang::interp;
APSInt;
namespace clang {
namespace interp {
template <class Emitter> class DeclScope final : public LocalScope<Emitter> { … };
template <class Emitter> class OptionScope final { … };
template <class Emitter>
bool InitLink::emit(Compiler<Emitter> *Ctx, const Expr *E) const { … }
template <class Emitter> class LabelScope { … };
template <class Emitter> class LoopScope final : public LabelScope<Emitter> { … };
template <class Emitter> class SwitchScope final : public LabelScope<Emitter> { … };
template <class Emitter> class StmtExprScope final { … };
}
}
template <class Emitter>
bool Compiler<Emitter>::VisitCastExpr(const CastExpr *CE) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitIntegerLiteral(const IntegerLiteral *LE) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitFloatingLiteral(const FloatingLiteral *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitImaginaryLiteral(const ImaginaryLiteral *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitFixedPointLiteral(const FixedPointLiteral *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitParenExpr(const ParenExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitBinaryOperator(const BinaryOperator *BO) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitPointerArithBinOp(const BinaryOperator *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitLogicalBinOp(const BinaryOperator *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitComplexBinOp(const BinaryOperator *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitVectorBinOp(const BinaryOperator *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitFixedPointBinOp(const BinaryOperator *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitFixedPointUnaryOperator(const UnaryOperator *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitImplicitValueInitExpr(
const ImplicitValueInitExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitArraySubscriptExpr(const ArraySubscriptExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::visitInitList(ArrayRef<const Expr *> Inits,
const Expr *ArrayFiller, const Expr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::visitArrayElemInit(unsigned ElemIndex,
const Expr *Init) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitInitListExpr(const InitListExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitCXXParenListInitExpr(
const CXXParenListInitExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitSubstNonTypeTemplateParmExpr(
const SubstNonTypeTemplateParmExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitConstantExpr(const ConstantExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitEmbedExpr(const EmbedExpr *E) { … }
static CharUnits AlignOfType(QualType T, const ASTContext &ASTCtx,
UnaryExprOrTypeTrait Kind) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitUnaryExprOrTypeTraitExpr(
const UnaryExprOrTypeTraitExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitMemberExpr(const MemberExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitArrayInitIndexExpr(const ArrayInitIndexExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitArrayInitLoopExpr(const ArrayInitLoopExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitOpaqueValueExpr(const OpaqueValueExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitAbstractConditionalOperator(
const AbstractConditionalOperator *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitStringLiteral(const StringLiteral *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitObjCStringLiteral(const ObjCStringLiteral *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitObjCEncodeExpr(const ObjCEncodeExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitSYCLUniqueStableNameExpr(
const SYCLUniqueStableNameExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitCharacterLiteral(const CharacterLiteral *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitFloatCompoundAssignOperator(
const CompoundAssignOperator *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitPointerCompoundAssignOperator(
const CompoundAssignOperator *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitCompoundAssignOperator(
const CompoundAssignOperator *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitExprWithCleanups(const ExprWithCleanups *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitMaterializeTemporaryExpr(
const MaterializeTemporaryExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitCXXBindTemporaryExpr(
const CXXBindTemporaryExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitCompoundLiteralExpr(const CompoundLiteralExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitTypeTraitExpr(const TypeTraitExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitArrayTypeTraitExpr(const ArrayTypeTraitExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitLambdaExpr(const LambdaExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitPredefinedExpr(const PredefinedExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitCXXThrowExpr(const CXXThrowExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitCXXReinterpretCastExpr(
const CXXReinterpretCastExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitCXXNoexceptExpr(const CXXNoexceptExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitCXXConstructExpr(const CXXConstructExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitSourceLocExpr(const SourceLocExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitOffsetOfExpr(const OffsetOfExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitCXXScalarValueInitExpr(
const CXXScalarValueInitExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitSizeOfPackExpr(const SizeOfPackExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitGenericSelectionExpr(
const GenericSelectionExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitChooseExpr(const ChooseExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitObjCBoolLiteralExpr(const ObjCBoolLiteralExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitCXXInheritedCtorInitExpr(
const CXXInheritedCtorInitExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitCXXNewExpr(const CXXNewExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitCXXDeleteExpr(const CXXDeleteExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitBlockExpr(const BlockExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitExpressionTraitExpr(const ExpressionTraitExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitCXXUuidofExpr(const CXXUuidofExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitRequiresExpr(const RequiresExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitConceptSpecializationExpr(
const ConceptSpecializationExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitCXXRewrittenBinaryOperator(
const CXXRewrittenBinaryOperator *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitPseudoObjectExpr(const PseudoObjectExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitPackIndexingExpr(const PackIndexingExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitRecoveryExpr(const RecoveryExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitAddrLabelExpr(const AddrLabelExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitConvertVectorExpr(const ConvertVectorExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitShuffleVectorExpr(const ShuffleVectorExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitExtVectorElementExpr(
const ExtVectorElementExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitObjCBoxedExpr(const ObjCBoxedExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitCXXStdInitializerListExpr(
const CXXStdInitializerListExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitStmtExpr(const StmtExpr *E) { … }
template <class Emitter> bool Compiler<Emitter>::discard(const Expr *E) { … }
template <class Emitter> bool Compiler<Emitter>::delegate(const Expr *E) { … }
template <class Emitter> bool Compiler<Emitter>::visit(const Expr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::visitInitializer(const Expr *E) { … }
template <class Emitter> bool Compiler<Emitter>::visitBool(const Expr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::visitZeroInitializer(PrimType T, QualType QT,
const Expr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::visitZeroRecordInitializer(const Record *R,
const Expr *E) { … }
template <class Emitter>
template <typename T>
bool Compiler<Emitter>::emitConst(T Value, PrimType Ty, const Expr *E) { … }
template <class Emitter>
template <typename T>
bool Compiler<Emitter>::emitConst(T Value, const Expr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::emitConst(const APSInt &Value, PrimType Ty,
const Expr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::emitConst(const APSInt &Value, const Expr *E) { … }
template <class Emitter>
unsigned Compiler<Emitter>::allocateLocalPrimitive(DeclTy &&Src, PrimType Ty,
bool IsConst,
bool IsExtended) { … }
template <class Emitter>
std::optional<unsigned>
Compiler<Emitter>::allocateLocal(DeclTy &&Src, QualType Ty,
const ValueDecl *ExtendingDecl) { … }
template <class Emitter>
unsigned Compiler<Emitter>::allocateTemporary(const Expr *E) { … }
template <class Emitter>
const RecordType *Compiler<Emitter>::getRecordTy(QualType Ty) { … }
template <class Emitter> Record *Compiler<Emitter>::getRecord(QualType Ty) { … }
template <class Emitter>
Record *Compiler<Emitter>::getRecord(const RecordDecl *RD) { … }
template <class Emitter>
const Function *Compiler<Emitter>::getFunction(const FunctionDecl *FD) { … }
template <class Emitter>
bool Compiler<Emitter>::visitExpr(const Expr *E, bool DestroyToplevelScope) { … }
template <class Emitter>
VarCreationState Compiler<Emitter>::visitDecl(const VarDecl *VD) { … }
template <class Emitter>
bool Compiler<Emitter>::visitDeclAndReturn(const VarDecl *VD,
bool ConstantContext) { … }
template <class Emitter>
VarCreationState Compiler<Emitter>::visitVarDecl(const VarDecl *VD,
bool Toplevel) { … }
template <class Emitter>
bool Compiler<Emitter>::visitAPValue(const APValue &Val, PrimType ValType,
const Expr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::visitAPValueInitializer(const APValue &Val,
const Expr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitBuiltinCallExpr(const CallExpr *E,
unsigned BuiltinID) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitCallExpr(const CallExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitCXXDefaultInitExpr(const CXXDefaultInitExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitCXXDefaultArgExpr(const CXXDefaultArgExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitCXXBoolLiteralExpr(const CXXBoolLiteralExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitCXXNullPtrLiteralExpr(
const CXXNullPtrLiteralExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitGNUNullExpr(const GNUNullExpr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitCXXThisExpr(const CXXThisExpr *E) { … }
template <class Emitter> bool Compiler<Emitter>::visitStmt(const Stmt *S) { … }
template <class Emitter>
bool Compiler<Emitter>::visitCompoundStmt(const CompoundStmt *S) { … }
template <class Emitter>
bool Compiler<Emitter>::visitDeclStmt(const DeclStmt *DS) { … }
template <class Emitter>
bool Compiler<Emitter>::visitReturnStmt(const ReturnStmt *RS) { … }
template <class Emitter> bool Compiler<Emitter>::visitIfStmt(const IfStmt *IS) { … }
template <class Emitter>
bool Compiler<Emitter>::visitWhileStmt(const WhileStmt *S) { … }
template <class Emitter> bool Compiler<Emitter>::visitDoStmt(const DoStmt *S) { … }
template <class Emitter>
bool Compiler<Emitter>::visitForStmt(const ForStmt *S) { … }
template <class Emitter>
bool Compiler<Emitter>::visitCXXForRangeStmt(const CXXForRangeStmt *S) { … }
template <class Emitter>
bool Compiler<Emitter>::visitBreakStmt(const BreakStmt *S) { … }
template <class Emitter>
bool Compiler<Emitter>::visitContinueStmt(const ContinueStmt *S) { … }
template <class Emitter>
bool Compiler<Emitter>::visitSwitchStmt(const SwitchStmt *S) { … }
template <class Emitter>
bool Compiler<Emitter>::visitCaseStmt(const CaseStmt *S) { … }
template <class Emitter>
bool Compiler<Emitter>::visitDefaultStmt(const DefaultStmt *S) { … }
template <class Emitter>
bool Compiler<Emitter>::visitAttributedStmt(const AttributedStmt *S) { … }
template <class Emitter>
bool Compiler<Emitter>::visitCXXTryStmt(const CXXTryStmt *S) { … }
template <class Emitter>
bool Compiler<Emitter>::emitLambdaStaticInvokerBody(const CXXMethodDecl *MD) { … }
template <class Emitter>
bool Compiler<Emitter>::checkLiteralType(const Expr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::compileConstructor(const CXXConstructorDecl *Ctor) { … }
template <class Emitter>
bool Compiler<Emitter>::compileDestructor(const CXXDestructorDecl *Dtor) { … }
template <class Emitter>
bool Compiler<Emitter>::visitFunc(const FunctionDecl *F) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitUnaryOperator(const UnaryOperator *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitComplexUnaryOperator(const UnaryOperator *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitVectorUnaryOperator(const UnaryOperator *E) { … }
template <class Emitter>
bool Compiler<Emitter>::visitDeclRef(const ValueDecl *D, const Expr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::VisitDeclRefExpr(const DeclRefExpr *E) { … }
template <class Emitter> void Compiler<Emitter>::emitCleanup() { … }
template <class Emitter>
unsigned Compiler<Emitter>::collectBaseOffset(const QualType BaseType,
const QualType DerivedType) { … }
template <class Emitter>
bool Compiler<Emitter>::emitPrimCast(PrimType FromT, PrimType ToT,
QualType ToQT, const Expr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::emitComplexReal(const Expr *SubExpr) { … }
template <class Emitter>
bool Compiler<Emitter>::emitComplexBoolCast(const Expr *E) { … }
template <class Emitter>
bool Compiler<Emitter>::emitComplexComparison(const Expr *LHS, const Expr *RHS,
const BinaryOperator *E) { … }
template <class Emitter>
bool Compiler<Emitter>::emitRecordDestruction(const Record *R, SourceInfo Loc) { … }
template <class Emitter>
bool Compiler<Emitter>::emitDestruction(const Descriptor *Desc,
SourceInfo Loc) { … }
namespace clang {
namespace interp {
template class Compiler<ByteCodeEmitter>;
template class Compiler<EvalEmitter>;
}
}