1 //===- NativeTypeUDT.h - info about class/struct type ------------*- C++-*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #ifndef LLVM_DEBUGINFO_PDB_NATIVE_NATIVETYPEUDT_H 11 #define LLVM_DEBUGINFO_PDB_NATIVE_NATIVETYPEUDT_H 12 13 #include "llvm/ADT/Optional.h" 14 #include "llvm/DebugInfo/CodeView/CodeView.h" 15 #include "llvm/DebugInfo/CodeView/TypeRecord.h" 16 #include "llvm/DebugInfo/PDB/Native/NativeRawSymbol.h" 17 #include "llvm/DebugInfo/PDB/Native/NativeSession.h" 18 19 namespace llvm { 20 namespace pdb { 21 22 class NativeTypeUDT : public NativeRawSymbol { 23 public: 24 NativeTypeUDT(NativeSession &Session, SymIndexId Id, codeview::TypeIndex TI, 25 codeview::ClassRecord Class); 26 27 NativeTypeUDT(NativeSession &Session, SymIndexId Id, codeview::TypeIndex TI, 28 codeview::UnionRecord Union); 29 30 NativeTypeUDT(NativeSession &Session, SymIndexId Id, 31 NativeTypeUDT &UnmodifiedType, 32 codeview::ModifierRecord Modifier); 33 34 ~NativeTypeUDT() override; 35 36 void dump(raw_ostream &OS, int Indent, PdbSymbolIdField ShowIdFields, 37 PdbSymbolIdField RecurseIdFields) const override; 38 39 std::string getName() const override; 40 SymIndexId getLexicalParentId() const override; 41 SymIndexId getUnmodifiedTypeId() const override; 42 SymIndexId getVirtualTableShapeId() const override; 43 uint64_t getLength() const override; 44 PDB_UdtType getUdtKind() const override; 45 bool hasConstructor() const override; 46 bool isConstType() const override; 47 bool hasAssignmentOperator() const override; 48 bool hasCastOperator() const override; 49 bool hasNestedTypes() const override; 50 bool hasOverloadedOperator() const override; 51 bool isInterfaceUdt() const override; 52 bool isIntrinsic() const override; 53 bool isNested() const override; 54 bool isPacked() const override; 55 bool isRefUdt() const override; 56 bool isScoped() const override; 57 bool isValueUdt() const override; 58 bool isUnalignedType() const override; 59 bool isVolatileType() const override; 60 61 protected: 62 codeview::TypeIndex Index; 63 64 Optional<codeview::ClassRecord> Class; 65 Optional<codeview::UnionRecord> Union; 66 NativeTypeUDT *UnmodifiedType = nullptr; 67 codeview::TagRecord *Tag = nullptr; 68 Optional<codeview::ModifierRecord> Modifiers; 69 }; 70 71 } // namespace pdb 72 } // namespace llvm 73 74 #endif // LLVM_DEBUGINFO_PDB_NATIVE_NATIVETYPEUDT_H