Path: blob/main/contrib/llvm-project/lldb/source/Plugins/SymbolFile/PDB/PDBASTParser.h
39642 views
//===-- PDBASTParser.h ------------------------------------------*- C++ -*-===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//78#ifndef LLDB_SOURCE_PLUGINS_SYMBOLFILE_PDB_PDBASTPARSER_H9#define LLDB_SOURCE_PLUGINS_SYMBOLFILE_PDB_PDBASTPARSER_H1011#include "lldb/lldb-forward.h"1213#include "Plugins/ExpressionParser/Clang/ClangASTImporter.h"1415class SymbolFilePDB;1617namespace clang {18class CharUnits;19class CXXRecordDecl;20class FieldDecl;21class RecordDecl;22} // namespace clang2324namespace lldb_private {25class TypeSystemClang;26class CompilerType;27} // namespace lldb_private2829namespace llvm {30namespace pdb {31template <typename ChildType> class ConcreteSymbolEnumerator;3233class PDBSymbol;34class PDBSymbolData;35class PDBSymbolFunc;36class PDBSymbolTypeBaseClass;37class PDBSymbolTypeBuiltin;38class PDBSymbolTypeUDT;39} // namespace pdb40} // namespace llvm4142class PDBASTParser {43public:44PDBASTParser(lldb_private::TypeSystemClang &ast);45~PDBASTParser();4647lldb::TypeSP CreateLLDBTypeFromPDBType(const llvm::pdb::PDBSymbol &type);48bool CompleteTypeFromPDB(lldb_private::CompilerType &compiler_type);4950clang::Decl *GetDeclForSymbol(const llvm::pdb::PDBSymbol &symbol);5152clang::DeclContext *53GetDeclContextForSymbol(const llvm::pdb::PDBSymbol &symbol);54clang::DeclContext *55GetDeclContextContainingSymbol(const llvm::pdb::PDBSymbol &symbol);5657void ParseDeclsForDeclContext(const clang::DeclContext *decl_context);5859clang::NamespaceDecl *FindNamespaceDecl(const clang::DeclContext *parent,60llvm::StringRef name);6162lldb_private::ClangASTImporter &GetClangASTImporter() {63return m_ast_importer;64}6566private:67typedef llvm::DenseMap<clang::CXXRecordDecl *, lldb::user_id_t>68CXXRecordDeclToUidMap;69typedef llvm::DenseMap<lldb::user_id_t, clang::Decl *> UidToDeclMap;70typedef std::set<clang::NamespaceDecl *> NamespacesSet;71typedef llvm::DenseMap<clang::DeclContext *, NamespacesSet>72ParentToNamespacesMap;73typedef llvm::DenseMap<clang::DeclContext *, lldb::user_id_t>74DeclContextToUidMap;75typedef llvm::pdb::ConcreteSymbolEnumerator<llvm::pdb::PDBSymbolData>76PDBDataSymbolEnumerator;77typedef llvm::pdb::ConcreteSymbolEnumerator<llvm::pdb::PDBSymbolTypeBaseClass>78PDBBaseClassSymbolEnumerator;79typedef llvm::pdb::ConcreteSymbolEnumerator<llvm::pdb::PDBSymbolFunc>80PDBFuncSymbolEnumerator;8182bool AddEnumValue(lldb_private::CompilerType enum_type,83const llvm::pdb::PDBSymbolData &data);84bool CompleteTypeFromUDT(lldb_private::SymbolFile &symbol_file,85lldb_private::CompilerType &compiler_type,86llvm::pdb::PDBSymbolTypeUDT &udt);87void88AddRecordMembers(lldb_private::SymbolFile &symbol_file,89lldb_private::CompilerType &record_type,90PDBDataSymbolEnumerator &members_enum,91lldb_private::ClangASTImporter::LayoutInfo &layout_info);92void93AddRecordBases(lldb_private::SymbolFile &symbol_file,94lldb_private::CompilerType &record_type, int record_kind,95PDBBaseClassSymbolEnumerator &bases_enum,96lldb_private::ClangASTImporter::LayoutInfo &layout_info) const;97void AddRecordMethods(lldb_private::SymbolFile &symbol_file,98lldb_private::CompilerType &record_type,99PDBFuncSymbolEnumerator &methods_enum);100clang::CXXMethodDecl *101AddRecordMethod(lldb_private::SymbolFile &symbol_file,102lldb_private::CompilerType &record_type,103const llvm::pdb::PDBSymbolFunc &method) const;104105lldb_private::TypeSystemClang &m_ast;106lldb_private::ClangASTImporter m_ast_importer;107108CXXRecordDeclToUidMap m_forward_decl_to_uid;109UidToDeclMap m_uid_to_decl;110ParentToNamespacesMap m_parent_to_namespaces;111NamespacesSet m_namespaces;112DeclContextToUidMap m_decl_context_to_uid;113};114115#endif // LLDB_SOURCE_PLUGINS_SYMBOLFILE_PDB_PDBASTPARSER_H116117118