1 //===-- SymbolFileNativePDB.h -----------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #ifndef LLDB_PLUGINS_SYMBOLFILE_NATIVEPDB_UDTRECORDCOMPLETER_H
11 #define LLDB_PLUGINS_SYMBOLFILE_NATIVEPDB_UDTRECORDCOMPLETER_H
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"
18 #include "PdbSymUid.h"
21 class CXXBaseSpecifier;
32 namespace lldb_private {
38 class UdtRecordCompleter : public llvm::codeview::TypeVisitorCallbacks {
41 llvm::codeview::UnionRecord ur;
42 llvm::codeview::ClassRecord cr;
43 llvm::codeview::EnumRecord er;
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;
55 UdtRecordCompleter(PdbTypeSymId id, CompilerType &derived_ct,
56 clang::TagDecl &tag_decl, PdbAstBuilder &ast_builder,
57 llvm::pdb::TpiStream &tpi);
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"
68 clang::QualType AddBaseClassForTypeIndex(llvm::codeview::TypeIndex ti,
69 llvm::codeview::MemberAccess access);
73 } // namespace lldb_private
75 #endif // LLDB_PLUGINS_SYMBOLFILE_NATIVEPDB_UDTRECORDCOMPLETER_H