]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/lldb/source/Plugins/SymbolFile/NativePDB/UdtRecordCompleter.h
Merge llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / lldb / source / Plugins / SymbolFile / NativePDB / UdtRecordCompleter.h
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