Summary: This commit renames ClangASTContext to TypeSystemClang to better reflect what this class is actually supposed to do (implement the TypeSystem interface for Clang). It also gets rid of the very confusing situation that we have both a `clang::ASTContext` and a `ClangASTContext` in clang (which sometimes causes Clang people to think I'm fiddling with Clang's ASTContext when I'm actually just doing LLDB work). I also have plans to potentially have multiple clang::ASTContext instances associated with one ClangASTContext so the ASTContext naming will then become even more confusing to people. Reviewers: #lldb, aprantl, shafik, clayborg, labath, JDevlieghere, davide, espindola, jdoerfert, xiaobai Reviewed By: clayborg, labath, xiaobai Subscribers: wuzish, emaste, nemanjai, mgorny, kbarton, MaskRay, arphaman, jfb, usaxena95, jingham, xiaobai, abidh, JDevlieghere, lldb-commits Tags: #lldb Differential Revision: https://reviews.llvm.org/D72684
117 lines
4.1 KiB
C++
117 lines
4.1 KiB
C++
//===-- PDBASTParser.h ------------------------------------------*- C++ -*-===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLDB_PLUGINS_SYMBOLFILE_PDB_PDBASTPARSER_H
|
|
#define LLDB_PLUGINS_SYMBOLFILE_PDB_PDBASTPARSER_H
|
|
|
|
#include "lldb/lldb-forward.h"
|
|
|
|
#include "lldb/Symbol/ClangASTImporter.h"
|
|
|
|
class SymbolFilePDB;
|
|
|
|
namespace clang {
|
|
class CharUnits;
|
|
class CXXRecordDecl;
|
|
class FieldDecl;
|
|
class RecordDecl;
|
|
} // namespace clang
|
|
|
|
namespace lldb_private {
|
|
class TypeSystemClang;
|
|
class CompilerType;
|
|
} // namespace lldb_private
|
|
|
|
namespace llvm {
|
|
namespace pdb {
|
|
template <typename ChildType> class ConcreteSymbolEnumerator;
|
|
|
|
class PDBSymbol;
|
|
class PDBSymbolData;
|
|
class PDBSymbolFunc;
|
|
class PDBSymbolTypeBaseClass;
|
|
class PDBSymbolTypeBuiltin;
|
|
class PDBSymbolTypeUDT;
|
|
} // namespace pdb
|
|
} // namespace llvm
|
|
|
|
class PDBASTParser {
|
|
public:
|
|
PDBASTParser(lldb_private::TypeSystemClang &ast);
|
|
~PDBASTParser();
|
|
|
|
lldb::TypeSP CreateLLDBTypeFromPDBType(const llvm::pdb::PDBSymbol &type);
|
|
bool CompleteTypeFromPDB(lldb_private::CompilerType &compiler_type);
|
|
|
|
clang::Decl *GetDeclForSymbol(const llvm::pdb::PDBSymbol &symbol);
|
|
|
|
clang::DeclContext *
|
|
GetDeclContextForSymbol(const llvm::pdb::PDBSymbol &symbol);
|
|
clang::DeclContext *
|
|
GetDeclContextContainingSymbol(const llvm::pdb::PDBSymbol &symbol);
|
|
|
|
void ParseDeclsForDeclContext(const clang::DeclContext *decl_context);
|
|
|
|
clang::NamespaceDecl *FindNamespaceDecl(const clang::DeclContext *parent,
|
|
llvm::StringRef name);
|
|
|
|
lldb_private::ClangASTImporter &GetClangASTImporter() {
|
|
return m_ast_importer;
|
|
}
|
|
|
|
private:
|
|
typedef llvm::DenseMap<clang::CXXRecordDecl *, lldb::user_id_t>
|
|
CXXRecordDeclToUidMap;
|
|
typedef llvm::DenseMap<lldb::user_id_t, clang::Decl *> UidToDeclMap;
|
|
typedef std::set<clang::NamespaceDecl *> NamespacesSet;
|
|
typedef llvm::DenseMap<clang::DeclContext *, NamespacesSet>
|
|
ParentToNamespacesMap;
|
|
typedef llvm::DenseMap<clang::DeclContext *, lldb::user_id_t>
|
|
DeclContextToUidMap;
|
|
typedef llvm::pdb::ConcreteSymbolEnumerator<llvm::pdb::PDBSymbolData>
|
|
PDBDataSymbolEnumerator;
|
|
typedef llvm::pdb::ConcreteSymbolEnumerator<llvm::pdb::PDBSymbolTypeBaseClass>
|
|
PDBBaseClassSymbolEnumerator;
|
|
typedef llvm::pdb::ConcreteSymbolEnumerator<llvm::pdb::PDBSymbolFunc>
|
|
PDBFuncSymbolEnumerator;
|
|
|
|
bool AddEnumValue(lldb_private::CompilerType enum_type,
|
|
const llvm::pdb::PDBSymbolData &data);
|
|
bool CompleteTypeFromUDT(lldb_private::SymbolFile &symbol_file,
|
|
lldb_private::CompilerType &compiler_type,
|
|
llvm::pdb::PDBSymbolTypeUDT &udt);
|
|
void
|
|
AddRecordMembers(lldb_private::SymbolFile &symbol_file,
|
|
lldb_private::CompilerType &record_type,
|
|
PDBDataSymbolEnumerator &members_enum,
|
|
lldb_private::ClangASTImporter::LayoutInfo &layout_info);
|
|
void
|
|
AddRecordBases(lldb_private::SymbolFile &symbol_file,
|
|
lldb_private::CompilerType &record_type, int record_kind,
|
|
PDBBaseClassSymbolEnumerator &bases_enum,
|
|
lldb_private::ClangASTImporter::LayoutInfo &layout_info) const;
|
|
void AddRecordMethods(lldb_private::SymbolFile &symbol_file,
|
|
lldb_private::CompilerType &record_type,
|
|
PDBFuncSymbolEnumerator &methods_enum);
|
|
clang::CXXMethodDecl *
|
|
AddRecordMethod(lldb_private::SymbolFile &symbol_file,
|
|
lldb_private::CompilerType &record_type,
|
|
const llvm::pdb::PDBSymbolFunc &method) const;
|
|
|
|
lldb_private::TypeSystemClang &m_ast;
|
|
lldb_private::ClangASTImporter m_ast_importer;
|
|
|
|
CXXRecordDeclToUidMap m_forward_decl_to_uid;
|
|
UidToDeclMap m_uid_to_decl;
|
|
ParentToNamespacesMap m_parent_to_namespaces;
|
|
NamespacesSet m_namespaces;
|
|
DeclContextToUidMap m_decl_context_to_uid;
|
|
};
|
|
|
|
#endif // LLDB_PLUGINS_SYMBOLFILE_PDB_PDBASTPARSER_H
|