Go to the documentation of this file.
13 #ifndef LLVM_CLANG_AST_MANGLE_H
14 #define LLVM_CLANG_AST_MANGLE_H
20 #include "llvm/ADT/DenseMap.h"
21 #include "llvm/Support/Casting.h"
30 class CXXConstructorDecl;
31 class CXXDestructorDecl;
34 struct MethodVFTableLocation;
38 struct ThisAdjustment;
52 virtual void anchor();
61 llvm::DenseMap<const BlockDecl*, unsigned> GlobalBlockIds;
62 llvm::DenseMap<const BlockDecl*, unsigned> LocalBlockIds;
63 llvm::DenseMap<const NamedDecl*, uint64_t> AnonStructIds;
68 bool isAux()
const {
return IsAux; }
72 : Context(Context), Diags(Diags), Kind(Kind), IsAux(IsAux) {}
83 llvm::DenseMap<const BlockDecl *, unsigned> &BlockIds
84 = Local? LocalBlockIds : GlobalBlockIds;
85 std::pair<llvm::DenseMap<const BlockDecl *, unsigned>::iterator,
bool>
86 Result = BlockIds.insert(std::make_pair(BD, BlockIds.size()));
87 return Result.first->second;
91 std::pair<llvm::DenseMap<const NamedDecl *, uint64_t>::iterator,
bool>
92 Result = AnonStructIds.insert(std::make_pair(D, AnonStructIds.size()));
93 return Result.first->second;
97 llvm::DenseMap<const NamedDecl *, uint64_t>::iterator Result =
98 AnonStructIds.find(D);
100 if (Result == AnonStructIds.end())
102 return Result->second;
130 unsigned ManglingNumber,
148 bool includePrefixByte =
true,
149 bool includeCategoryNamespace =
true);
161 raw_ostream &Out) = 0;
164 raw_ostream &Out) = 0;
230 raw_ostream &Out) = 0;
237 raw_ostream &Out) = 0;
241 raw_ostream &Out) = 0;
245 raw_ostream &Out) = 0;
249 raw_ostream &Out) = 0;
252 bool IsUnaligned, uint32_t NumEntries,
253 raw_ostream &Out) = 0;
256 raw_ostream &Out) = 0;
260 uint32_t NVOffset, int32_t VBPtrOffset,
261 uint32_t VBIndex, raw_ostream &Out) = 0;
264 const CXXRecordDecl *Derived, uint32_t NVOffset, int32_t VBPtrOffset,
265 uint32_t VBTableOffset, uint32_t Flags, raw_ostream &Out) = 0;
268 raw_ostream &Out) = 0;
271 raw_ostream &Out) = 0;
276 raw_ostream &Out) = 0;
304 std::unique_ptr<Implementation> Impl;
static MicrosoftMangleContext * create(ASTContext &Context, DiagnosticsEngine &Diags, bool IsAux=false)
void mangleObjCMethodName(const ObjCMethodDecl *MD, raw_ostream &OS, bool includePrefixByte=true, bool includeCategoryNamespace=true)
YAML serialization mapping.
Represents a C++ constructor within a class.
virtual void mangleVirtualMemPtrThunk(const CXXMethodDecl *MD, const MethodVFTableLocation &ML, raw_ostream &Out)=0
bool writeName(const Decl *D, raw_ostream &OS)
Writes name for D to OS.
DeclContext - This is used only as base class of specific decl types that can act as declaration cont...
virtual std::string getLambdaString(const CXXRecordDecl *Lambda)=0
This represents a decl that may have a name.
virtual void mangleMSGuidDecl(const MSGuidDecl *GD, raw_ostream &)
virtual void mangleThunk(const CXXMethodDecl *MD, const ThunkInfo &Thunk, raw_ostream &)=0
A (possibly-)qualified type.
virtual void mangleDynamicAtExitDestructor(const VarDecl *D, raw_ostream &)=0
Concrete class used by the front-end to report problems and issues.
ASTContext & getASTContext() const
virtual bool isUniqueInternalLinkageDecl(const NamedDecl *ND)
ManglerKind getKind() const
void mangleCtorBlock(const CXXConstructorDecl *CD, CXXCtorType CT, const BlockDecl *BD, raw_ostream &Out)
ASTNameGenerator(ASTContext &Ctx)
virtual bool shouldMangleStringLiteral(const StringLiteral *SL)=0
unsigned getBlockId(const BlockDecl *BD, bool Local)
void mangleDtorBlock(const CXXDestructorDecl *CD, CXXDtorType DT, const BlockDecl *BD, raw_ostream &Out)
The base class of the type hierarchy.
GlobalDecl - represents a global declaration.
void mangleObjCMethodNameAsSourceName(const ObjCMethodDecl *MD, raw_ostream &)
static bool classof(const MangleContext *C)
static bool classof(const MangleContext *C)
MangleContext(ASTContext &Context, DiagnosticsEngine &Diags, ManglerKind Kind, bool IsAux=false)
MicrosoftMangleContext(ASTContext &C, DiagnosticsEngine &D, bool IsAux=false)
virtual void mangleCXXDtorThunk(const CXXDestructorDecl *DD, CXXDtorType Type, const ThisAdjustment &ThisAdjustment, raw_ostream &)=0
virtual void mangleLambdaSig(const CXXRecordDecl *Lambda, raw_ostream &)=0
virtual void mangleCXXRTTIName(QualType T, raw_ostream &)=0
MangleContext - Context for tracking state which persists across multiple calls to the C++ name mangl...
CXXCtorType
C++ constructor types.
Describes a module or submodule.
virtual void mangleCXXRTTIBaseClassDescriptor(const CXXRecordDecl *Derived, uint32_t NVOffset, int32_t VBPtrOffset, uint32_t VBTableOffset, uint32_t Flags, raw_ostream &Out)=0
Represents a block literal declaration, which is like an unnamed FunctionDecl.
DiagnosticsEngine & getDiags() const
virtual void mangleCXXVTT(const CXXRecordDecl *RD, raw_ostream &)=0
virtual void mangleCXXThrowInfo(QualType T, bool IsConst, bool IsVolatile, bool IsUnaligned, uint32_t NumEntries, raw_ostream &Out)=0
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
virtual void mangleCXXRTTICompleteObjectLocator(const CXXRecordDecl *Derived, ArrayRef< const CXXRecordDecl * > BasePath, raw_ostream &Out)=0
CXXDtorType
C++ destructor types.
void mangleName(GlobalDecl GD, raw_ostream &)
virtual void mangleCXXDtorComdat(const CXXDestructorDecl *D, raw_ostream &)=0
virtual void mangleStaticGuardVariable(const VarDecl *D, raw_ostream &)=0
Represents a C++ destructor within a class.
virtual void mangleTypeName(QualType T, raw_ostream &)=0
Generates a unique string for an externally visible type for use with TBAA or type uniquing.
void mangleBlock(const DeclContext *DC, const BlockDecl *BD, raw_ostream &Out)
Represents a variable declaration or definition.
StringLiteral - This represents a string literal expression, e.g.
virtual void mangleCXXCatchableType(QualType T, const CXXConstructorDecl *CD, CXXCtorType CT, uint32_t Size, uint32_t NVOffset, int32_t VBPtrOffset, uint32_t VBIndex, raw_ostream &Out)=0
virtual void mangleCXXRTTIBaseClassArray(const CXXRecordDecl *Derived, raw_ostream &Out)=0
virtual void mangleCXXRTTIClassHierarchyDescriptor(const CXXRecordDecl *Derived, raw_ostream &Out)=0
llvm::Optional< unsigned >(*)(ASTContext &, const NamedDecl *) DiscriminatorOverrideTy
virtual void mangleCXXVTable(const CXXRecordDecl *RD, raw_ostream &)=0
virtual void mangleItaniumThreadLocalInit(const VarDecl *D, raw_ostream &)=0
virtual void needsUniqueInternalLinkageNames()
Represents a C++ struct/union/class.
virtual void mangleStringLiteral(const StringLiteral *SL, raw_ostream &)=0
virtual void mangleCXXRTTI(QualType T, raw_ostream &)=0
bool shouldMangleDeclName(const NamedDecl *D)
Decl - This represents one declaration (or definition), e.g.
The this pointer adjustment as well as an optional return adjustment for a thunk.
virtual void mangleCXXVirtualDisplacementMap(const CXXRecordDecl *SrcRD, const CXXRecordDecl *DstRD, raw_ostream &Out)=0
virtual void mangleReferenceTemporary(const VarDecl *D, unsigned ManglingNumber, raw_ostream &)=0
virtual void mangleCXXCtorComdat(const CXXConstructorDecl *D, raw_ostream &)=0
virtual void mangleCXXCatchableTypeArray(QualType T, uint32_t NumEntries, raw_ostream &Out)=0
std::vector< std::string > getAllManglings(const Decl *D)
virtual void mangleDynamicInitializer(const VarDecl *D, raw_ostream &)=0
virtual void mangleCXXName(GlobalDecl GD, raw_ostream &)=0
virtual void mangleSEHFilterExpression(const NamedDecl *EnclosingDecl, raw_ostream &Out)=0
ObjCMethodDecl - Represents an instance or class method declaration.
virtual void mangleSEHFinallyBlock(const NamedDecl *EnclosingDecl, raw_ostream &Out)=0
virtual void mangleCXXVFTable(const CXXRecordDecl *Derived, ArrayRef< const CXXRecordDecl * > BasePath, raw_ostream &Out)=0
Mangle vftable symbols.
static ItaniumMangleContext * create(ASTContext &Context, DiagnosticsEngine &Diags, bool IsAux=false)
uint64_t getAnonymousStructIdForDebugInfo(const NamedDecl *D)
virtual void mangleDynamicStermFinalizer(const VarDecl *D, raw_ostream &)=0
virtual void startNewFunction()
ItaniumMangleContext(ASTContext &C, DiagnosticsEngine &D, bool IsAux=false)
uint64_t getAnonymousStructId(const NamedDecl *D)
virtual DiscriminatorOverrideTy getDiscriminatorOverride() const =0
virtual void mangleCXXVBTable(const CXXRecordDecl *Derived, ArrayRef< const CXXRecordDecl * > BasePath, raw_ostream &Out)=0
Mangle vbtable symbols.
A this pointer adjustment.
std::string getName(const Decl *D)
virtual void mangleModuleInitializer(const Module *Module, raw_ostream &)=0
void mangleGlobalBlock(const BlockDecl *BD, const NamedDecl *ID, raw_ostream &Out)
virtual void mangleThreadSafeStaticGuardVariable(const VarDecl *VD, unsigned GuardNum, raw_ostream &Out)=0
virtual bool shouldMangleCXXName(const NamedDecl *D)=0
virtual void mangleItaniumThreadLocalWrapper(const VarDecl *D, raw_ostream &)=0
Represents a static or instance method of a struct/union/class.
virtual void mangleCXXCtorVTable(const CXXRecordDecl *RD, int64_t Offset, const CXXRecordDecl *Type, raw_ostream &)=0