1 //===-- SymbolFileNativePDB.h -----------------------------------*- 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 LLDB_PLUGINS_SYMBOLFILE_NATIVEPDB_UDTRECORDCOMPLETER_H 11 #define LLDB_PLUGINS_SYMBOLFILE_NATIVEPDB_UDTRECORDCOMPLETER_H 12 13 #include "lldb/Symbol/ClangASTImporter.h" 14 #include "llvm/DebugInfo/CodeView/CVRecord.h" 15 #include "llvm/DebugInfo/CodeView/TypeRecord.h" 16 #include "llvm/DebugInfo/CodeView/TypeVisitorCallbacks.h" 17 18 #include "PdbSymUid.h" 19 20 namespace clang { 21 class CXXBaseSpecifier; 22 class QualType; 23 class TagDecl; 24 } // namespace clang 25 26 namespace llvm { 27 namespace pdb { 28 class TpiStream; 29 } 30 } // namespace llvm 31 32 namespace lldb_private { 33 class Type; 34 class CompilerType; 35 namespace npdb { 36 class PdbAstBuilder; 37 38 class UdtRecordCompleter : public llvm::codeview::TypeVisitorCallbacks { 39 union UdtTagRecord { 40 UdtTagRecord() {} 41 llvm::codeview::UnionRecord ur; 42 llvm::codeview::ClassRecord cr; 43 llvm::codeview::EnumRecord er; 44 } m_cvr; 45 46 PdbTypeSymId m_id; 47 CompilerType &m_derived_ct; 48 clang::TagDecl &m_tag_decl; 49 PdbAstBuilder &m_ast_builder; 50 llvm::pdb::TpiStream &m_tpi; 51 std::vector<std::unique_ptr<clang::CXXBaseSpecifier>> m_bases; 52 ClangASTImporter::LayoutInfo m_layout; 53 54 public: 55 UdtRecordCompleter(PdbTypeSymId id, CompilerType &derived_ct, 56 clang::TagDecl &tag_decl, PdbAstBuilder &ast_builder, 57 llvm::pdb::TpiStream &tpi); 58 59 #define MEMBER_RECORD(EnumName, EnumVal, Name) \ 60 llvm::Error visitKnownMember(llvm::codeview::CVMemberRecord &CVR, \ 61 llvm::codeview::Name##Record &Record) override; 62 #define MEMBER_RECORD_ALIAS(EnumName, EnumVal, Name, AliasName) 63 #include "llvm/DebugInfo/CodeView/CodeViewTypes.def" 64 65 void complete(); 66 67 private: 68 clang::QualType AddBaseClassForTypeIndex(llvm::codeview::TypeIndex ti, 69 llvm::codeview::MemberAccess access); 70 }; 71 72 } // namespace npdb 73 } // namespace lldb_private 74 75 #endif // LLDB_PLUGINS_SYMBOLFILE_NATIVEPDB_UDTRECORDCOMPLETER_H 76