| //===-- 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_SOURCE_PLUGINS_SYMBOLFILE_PDB_PDBASTPARSER_H | |
| #define LLDB_SOURCE_PLUGINS_SYMBOLFILE_PDB_PDBASTPARSER_H | |
| #include "lldb/lldb-forward.h" | |
| #include "Plugins/ExpressionParser/Clang/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_SOURCE_PLUGINS_SYMBOLFILE_PDB_PDBASTPARSER_H |