10b57cec5SDimitry Andric //===-- DWARFASTParser.h ----------------------------------------*- C++ -*-===//
20b57cec5SDimitry Andric //
30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60b57cec5SDimitry Andric //
70b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
80b57cec5SDimitry Andric 
95ffd83dbSDimitry Andric #ifndef LLDB_SOURCE_PLUGINS_SYMBOLFILE_DWARF_DWARFASTPARSER_H
105ffd83dbSDimitry Andric #define LLDB_SOURCE_PLUGINS_SYMBOLFILE_DWARF_DWARFASTPARSER_H
110b57cec5SDimitry Andric 
120b57cec5SDimitry Andric #include "DWARFDefines.h"
130b57cec5SDimitry Andric #include "lldb/Core/PluginInterface.h"
140b57cec5SDimitry Andric #include "lldb/Symbol/SymbolFile.h"
150b57cec5SDimitry Andric #include "lldb/Symbol/CompilerDecl.h"
160b57cec5SDimitry Andric #include "lldb/Symbol/CompilerDeclContext.h"
1781ad6265SDimitry Andric #include "lldb/lldb-enumerations.h"
18bdd1243dSDimitry Andric #include <optional>
190b57cec5SDimitry Andric 
200b57cec5SDimitry Andric namespace lldb_private {
210b57cec5SDimitry Andric class CompileUnit;
220b57cec5SDimitry Andric class ExecutionContext;
230b57cec5SDimitry Andric }
245f757f3fSDimitry Andric 
255f757f3fSDimitry Andric namespace lldb_private::plugin {
265f757f3fSDimitry Andric namespace dwarf {
275f757f3fSDimitry Andric class DWARFDIE;
280b57cec5SDimitry Andric class SymbolFileDWARF;
290b57cec5SDimitry Andric 
300b57cec5SDimitry Andric class DWARFASTParser {
310b57cec5SDimitry Andric public:
325f757f3fSDimitry Andric   enum class Kind { DWARFASTParserClang };
DWARFASTParser(Kind kind)335f757f3fSDimitry Andric   DWARFASTParser(Kind kind) : m_kind(kind) {}
345f757f3fSDimitry Andric 
35fe6060f1SDimitry Andric   virtual ~DWARFASTParser() = default;
360b57cec5SDimitry Andric 
375f757f3fSDimitry Andric   virtual lldb::TypeSP ParseTypeFromDWARF(const SymbolContext &sc,
380b57cec5SDimitry Andric                                           const DWARFDIE &die,
390b57cec5SDimitry Andric                                           bool *type_is_new_ptr) = 0;
400b57cec5SDimitry Andric 
415f757f3fSDimitry Andric   virtual ConstString ConstructDemangledNameFromDWARF(const DWARFDIE &die) = 0;
42bdd1243dSDimitry Andric 
435f757f3fSDimitry Andric   virtual Function *ParseFunctionFromDWARF(CompileUnit &comp_unit,
44349cc55cSDimitry Andric                                            const DWARFDIE &die,
455f757f3fSDimitry Andric                                            const AddressRange &range) = 0;
460b57cec5SDimitry Andric 
475f757f3fSDimitry Andric   virtual bool CompleteTypeFromDWARF(const DWARFDIE &die, Type *type,
485f757f3fSDimitry Andric                                      CompilerType &compiler_type) = 0;
490b57cec5SDimitry Andric 
505f757f3fSDimitry Andric   virtual CompilerDecl GetDeclForUIDFromDWARF(const DWARFDIE &die) = 0;
510b57cec5SDimitry Andric 
525f757f3fSDimitry Andric   virtual CompilerDeclContext
530b57cec5SDimitry Andric   GetDeclContextForUIDFromDWARF(const DWARFDIE &die) = 0;
540b57cec5SDimitry Andric 
555f757f3fSDimitry Andric   virtual CompilerDeclContext
560b57cec5SDimitry Andric   GetDeclContextContainingUIDFromDWARF(const DWARFDIE &die) = 0;
570b57cec5SDimitry Andric 
589dba64beSDimitry Andric   virtual void EnsureAllDIEsInDeclContextHaveBeenParsed(
595f757f3fSDimitry Andric       CompilerDeclContext decl_context) = 0;
600b57cec5SDimitry Andric 
615f757f3fSDimitry Andric   virtual ConstString GetDIEClassTemplateParams(const DWARFDIE &die) = 0;
62bdd1243dSDimitry Andric 
635f757f3fSDimitry Andric   static std::optional<SymbolFile::ArrayInfo>
640b57cec5SDimitry Andric   ParseChildArrayInfo(const DWARFDIE &parent_die,
655f757f3fSDimitry Andric                       const ExecutionContext *exe_ctx = nullptr);
665f757f3fSDimitry Andric 
675f757f3fSDimitry Andric   lldb_private::Type *GetTypeForDIE(const DWARFDIE &die);
6881ad6265SDimitry Andric 
6981ad6265SDimitry Andric   static lldb::AccessType GetAccessTypeFromDWARF(uint32_t dwarf_accessibility);
705f757f3fSDimitry Andric 
GetKind()715f757f3fSDimitry Andric   Kind GetKind() const { return m_kind; }
725f757f3fSDimitry Andric 
735f757f3fSDimitry Andric private:
745f757f3fSDimitry Andric   const Kind m_kind;
750b57cec5SDimitry Andric };
765f757f3fSDimitry Andric } // namespace dwarf
775f757f3fSDimitry Andric } // namespace lldb_private::plugin
780b57cec5SDimitry Andric 
795ffd83dbSDimitry Andric #endif // LLDB_SOURCE_PLUGINS_SYMBOLFILE_DWARF_DWARFASTPARSER_H
80