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 TagDecl; 23 } // namespace clang 24 25 namespace lldb_private { 26 class Type; 27 class CompilerType; 28 namespace npdb { 29 class SymbolFileNativePDB; 30 31 class UdtRecordCompleter : public llvm::codeview::TypeVisitorCallbacks { 32 union UdtTagRecord { 33 UdtTagRecord() {} 34 llvm::codeview::UnionRecord ur; 35 llvm::codeview::ClassRecord cr; 36 llvm::codeview::EnumRecord er; 37 } m_cvr; 38 39 PdbSymUid m_uid; 40 CompilerType &m_derived_ct; 41 clang::TagDecl &m_tag_decl; 42 SymbolFileNativePDB &m_symbol_file; 43 std::vector<std::unique_ptr<clang::CXXBaseSpecifier>> m_bases; 44 ClangASTImporter::LayoutInfo m_layout; 45 46 public: 47 UdtRecordCompleter(PdbSymUid uid, CompilerType &derived_ct, 48 clang::TagDecl &tag_decl, 49 SymbolFileNativePDB &symbol_file); 50 51 #define MEMBER_RECORD(EnumName, EnumVal, Name) \ 52 llvm::Error visitKnownMember(llvm::codeview::CVMemberRecord &CVR, \ 53 llvm::codeview::Name##Record &Record) override; 54 #define MEMBER_RECORD_ALIAS(EnumName, EnumVal, Name, AliasName) 55 #include "llvm/DebugInfo/CodeView/CodeViewTypes.def" 56 57 void complete(); 58 59 private: 60 lldb::opaque_compiler_type_t 61 AddBaseClassForTypeIndex(llvm::codeview::TypeIndex ti, 62 llvm::codeview::MemberAccess access); 63 }; 64 65 } // namespace npdb 66 } // namespace lldb_private 67 68 #endif // LLDB_PLUGINS_SYMBOLFILE_NATIVEPDB_UDTRECORDCOMPLETER_H 69