/// \brief Maps from type identifier to the actual MDNode.
typedef DenseMap<const MDString *, MDNode *> DITypeIdentifierMap;
-class DIDescriptor {
- MDNode *N;
-
-public:
- DIDescriptor(const MDNode *N = nullptr) : N(const_cast<MDNode *>(N)) {}
-
- operator MDNode *() const { return N; }
- MDNode *operator->() const { return N; }
- MDNode &operator*() const { return *N; }
-};
-
#define DECLARE_SIMPLIFY_DESCRIPTOR(DESC) \
class DESC; \
template <> struct simplify_type<const DESC>; \
template <> struct simplify_type<DESC>;
-DECLARE_SIMPLIFY_DESCRIPTOR(DIDescriptor)
DECLARE_SIMPLIFY_DESCRIPTOR(DISubrange)
DECLARE_SIMPLIFY_DESCRIPTOR(DIEnumerator)
DECLARE_SIMPLIFY_DESCRIPTOR(DIScope)
public:
DIScope(const MDScope *N = nullptr) : N(const_cast<MDScope *>(N)) {}
- operator DIDescriptor() const { return N; }
operator MDScope *() const { return N; }
MDScope *operator->() const { return N; }
MDScope &operator*() const { return *N; }
public:
DIType(const MDType *N = nullptr) : N(const_cast<MDType *>(N)) {}
- operator DIDescriptor() const { return N; }
operator DIScope() const { return N; }
operator MDType *() const { return N; }
MDType *operator->() const { return N; }
DIBasicType(const MDBasicType *N = nullptr)
: N(const_cast<MDBasicType *>(N)) {}
- operator DIDescriptor() const { return N; }
operator DIType() const { return N; }
operator MDBasicType *() const { return N; }
MDBasicType *operator->() const { return N; }
DIDerivedType(const MDDerivedTypeBase *N = nullptr)
: N(const_cast<MDDerivedTypeBase *>(N)) {}
- operator DIDescriptor() const { return N; }
operator DIType() const { return N; }
operator MDDerivedTypeBase *() const { return N; }
MDDerivedTypeBase *operator->() const { return N; }
DICompositeType(const MDCompositeTypeBase *N = nullptr)
: N(const_cast<MDCompositeTypeBase *>(N)) {}
- operator DIDescriptor() const { return N; }
operator DIType() const { return N; }
operator MDCompositeTypeBase *() const { return N; }
MDCompositeTypeBase *operator->() const { return N; }
DISubroutineType(const MDSubroutineType *N = nullptr)
: N(const_cast<MDSubroutineType *>(N)) {}
- operator DIDescriptor() const { return N; }
operator DIType() const { return N; }
operator DICompositeType() const { return N; }
operator MDSubroutineType *() const { return N; }
public:
DIFile(const MDFile *N = nullptr) : N(const_cast<MDFile *>(N)) {}
- operator DIDescriptor() const { return N; }
operator DIScope() const { return N; }
operator MDFile *() const { return N; }
MDFile *operator->() const { return N; }
DICompileUnit(const MDCompileUnit *N = nullptr)
: N(const_cast<MDCompileUnit *>(N)) {}
- operator DIDescriptor() const { return N; }
operator DIScope() const { return N; }
operator MDCompileUnit *() const { return N; }
MDCompileUnit *operator->() const { return N; }
DISubprogram(const MDSubprogram *N = nullptr)
: N(const_cast<MDSubprogram *>(N)) {}
- operator DIDescriptor() const { return N; }
operator DIScope() const { return N; }
operator MDSubprogram *() const { return N; }
MDSubprogram *operator->() const { return N; }
DILexicalBlock(const MDLexicalBlockBase *N = nullptr)
: N(const_cast<MDLexicalBlockBase *>(N)) {}
- operator DIDescriptor() const { return N; }
operator MDLexicalBlockBase *() const { return N; }
MDLexicalBlockBase *operator->() const { return N; }
MDLexicalBlockBase &operator*() const { return *N; }
DILexicalBlockFile(const MDLexicalBlockFile *N = nullptr)
: N(const_cast<MDLexicalBlockFile *>(N)) {}
- operator DIDescriptor() const { return N; }
operator MDLexicalBlockFile *() const { return N; }
MDLexicalBlockFile *operator->() const { return N; }
MDLexicalBlockFile &operator*() const { return *N; }
DINameSpace(const MDNamespace *N = nullptr)
: N(const_cast<MDNamespace *>(N)) {}
- operator DIDescriptor() const { return N; }
operator DIScope() const { return N; }
operator MDNamespace *() const { return N; }
MDNamespace *operator->() const { return N; }
DIGlobalVariable(const MDGlobalVariable *N = nullptr)
: N(const_cast<MDGlobalVariable *>(N)) {}
- operator DIDescriptor() const { return N; }
operator MDGlobalVariable *() const { return N; }
MDGlobalVariable *operator->() const { return N; }
MDGlobalVariable &operator*() const { return *N; }
DIImportedEntity(const MDImportedEntity *N = nullptr)
: N(const_cast<MDImportedEntity *>(N)) {}
- operator DIDescriptor() const { return N; }
operator MDImportedEntity *() const { return N; }
MDImportedEntity *operator->() const { return N; }
MDImportedEntity &operator*() const { return *N; }
static SimpleType getSimplifiedValue(const DESC &DI) { return DI; } \
}; \
template <> struct simplify_type<DESC> : simplify_type<const DESC> {};
-SIMPLIFY_DESCRIPTOR(DIDescriptor)
SIMPLIFY_DESCRIPTOR(DISubrange)
SIMPLIFY_DESCRIPTOR(DIEnumerator)
SIMPLIFY_DESCRIPTOR(DIScope)