Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/lldb/source/Plugins/SymbolFile/PDB/PDBASTParser.h
39642 views
1
//===-- PDBASTParser.h ------------------------------------------*- C++ -*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
9
#ifndef LLDB_SOURCE_PLUGINS_SYMBOLFILE_PDB_PDBASTPARSER_H
10
#define LLDB_SOURCE_PLUGINS_SYMBOLFILE_PDB_PDBASTPARSER_H
11
12
#include "lldb/lldb-forward.h"
13
14
#include "Plugins/ExpressionParser/Clang/ClangASTImporter.h"
15
16
class SymbolFilePDB;
17
18
namespace clang {
19
class CharUnits;
20
class CXXRecordDecl;
21
class FieldDecl;
22
class RecordDecl;
23
} // namespace clang
24
25
namespace lldb_private {
26
class TypeSystemClang;
27
class CompilerType;
28
} // namespace lldb_private
29
30
namespace llvm {
31
namespace pdb {
32
template <typename ChildType> class ConcreteSymbolEnumerator;
33
34
class PDBSymbol;
35
class PDBSymbolData;
36
class PDBSymbolFunc;
37
class PDBSymbolTypeBaseClass;
38
class PDBSymbolTypeBuiltin;
39
class PDBSymbolTypeUDT;
40
} // namespace pdb
41
} // namespace llvm
42
43
class PDBASTParser {
44
public:
45
PDBASTParser(lldb_private::TypeSystemClang &ast);
46
~PDBASTParser();
47
48
lldb::TypeSP CreateLLDBTypeFromPDBType(const llvm::pdb::PDBSymbol &type);
49
bool CompleteTypeFromPDB(lldb_private::CompilerType &compiler_type);
50
51
clang::Decl *GetDeclForSymbol(const llvm::pdb::PDBSymbol &symbol);
52
53
clang::DeclContext *
54
GetDeclContextForSymbol(const llvm::pdb::PDBSymbol &symbol);
55
clang::DeclContext *
56
GetDeclContextContainingSymbol(const llvm::pdb::PDBSymbol &symbol);
57
58
void ParseDeclsForDeclContext(const clang::DeclContext *decl_context);
59
60
clang::NamespaceDecl *FindNamespaceDecl(const clang::DeclContext *parent,
61
llvm::StringRef name);
62
63
lldb_private::ClangASTImporter &GetClangASTImporter() {
64
return m_ast_importer;
65
}
66
67
private:
68
typedef llvm::DenseMap<clang::CXXRecordDecl *, lldb::user_id_t>
69
CXXRecordDeclToUidMap;
70
typedef llvm::DenseMap<lldb::user_id_t, clang::Decl *> UidToDeclMap;
71
typedef std::set<clang::NamespaceDecl *> NamespacesSet;
72
typedef llvm::DenseMap<clang::DeclContext *, NamespacesSet>
73
ParentToNamespacesMap;
74
typedef llvm::DenseMap<clang::DeclContext *, lldb::user_id_t>
75
DeclContextToUidMap;
76
typedef llvm::pdb::ConcreteSymbolEnumerator<llvm::pdb::PDBSymbolData>
77
PDBDataSymbolEnumerator;
78
typedef llvm::pdb::ConcreteSymbolEnumerator<llvm::pdb::PDBSymbolTypeBaseClass>
79
PDBBaseClassSymbolEnumerator;
80
typedef llvm::pdb::ConcreteSymbolEnumerator<llvm::pdb::PDBSymbolFunc>
81
PDBFuncSymbolEnumerator;
82
83
bool AddEnumValue(lldb_private::CompilerType enum_type,
84
const llvm::pdb::PDBSymbolData &data);
85
bool CompleteTypeFromUDT(lldb_private::SymbolFile &symbol_file,
86
lldb_private::CompilerType &compiler_type,
87
llvm::pdb::PDBSymbolTypeUDT &udt);
88
void
89
AddRecordMembers(lldb_private::SymbolFile &symbol_file,
90
lldb_private::CompilerType &record_type,
91
PDBDataSymbolEnumerator &members_enum,
92
lldb_private::ClangASTImporter::LayoutInfo &layout_info);
93
void
94
AddRecordBases(lldb_private::SymbolFile &symbol_file,
95
lldb_private::CompilerType &record_type, int record_kind,
96
PDBBaseClassSymbolEnumerator &bases_enum,
97
lldb_private::ClangASTImporter::LayoutInfo &layout_info) const;
98
void AddRecordMethods(lldb_private::SymbolFile &symbol_file,
99
lldb_private::CompilerType &record_type,
100
PDBFuncSymbolEnumerator &methods_enum);
101
clang::CXXMethodDecl *
102
AddRecordMethod(lldb_private::SymbolFile &symbol_file,
103
lldb_private::CompilerType &record_type,
104
const llvm::pdb::PDBSymbolFunc &method) const;
105
106
lldb_private::TypeSystemClang &m_ast;
107
lldb_private::ClangASTImporter m_ast_importer;
108
109
CXXRecordDeclToUidMap m_forward_decl_to_uid;
110
UidToDeclMap m_uid_to_decl;
111
ParentToNamespacesMap m_parent_to_namespaces;
112
NamespacesSet m_namespaces;
113
DeclContextToUidMap m_decl_context_to_uid;
114
};
115
116
#endif // LLDB_SOURCE_PLUGINS_SYMBOLFILE_PDB_PDBASTPARSER_H
117
118