Coverage Report

Created: 2022-01-18 06:27

/Users/buildslave/jenkins/workspace/coverage/llvm-project/lldb/source/Plugins/SymbolFile/PDB/PDBASTParser.h
Line
Count
Source (jump to first uncovered line)
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
0
  lldb_private::ClangASTImporter &GetClangASTImporter() {
64
0
    return m_ast_importer;
65
0
  }
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