SymbolFileSymtab.h revision 16d2187c0c3992f22e9cb011f863dc0fe35e3cde
1//===-- SymbolFileSymtab.h --------------------------------------*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#ifndef liblldb_SymbolFileSymtab_h_
11#define liblldb_SymbolFileSymtab_h_
12
13#include "lldb/Symbol/SymbolFile.h"
14#include "lldb/Symbol/Symtab.h"
15#include <vector>
16
17class SymbolFileSymtab : public lldb_private::SymbolFile
18{
19public:
20    //------------------------------------------------------------------
21    // Static Functions
22    //------------------------------------------------------------------
23    static void
24    Initialize();
25
26    static void
27    Terminate();
28
29    static const char *
30    GetPluginNameStatic();
31
32    static const char *
33    GetPluginDescriptionStatic();
34
35    static lldb_private::SymbolFile*
36    CreateInstance (lldb_private::ObjectFile* obj_file);
37
38    //------------------------------------------------------------------
39    // Constructors and Destructors
40    //------------------------------------------------------------------
41    SymbolFileSymtab(lldb_private::ObjectFile* obj_file);
42
43    virtual
44    ~SymbolFileSymtab();
45
46    virtual uint32_t        CalculateAbilities ();
47
48    //------------------------------------------------------------------
49    // Compile Unit function calls
50    //------------------------------------------------------------------
51    virtual uint32_t
52    GetNumCompileUnits();
53
54    virtual lldb::CompUnitSP
55    ParseCompileUnitAtIndex(uint32_t index);
56
57    virtual size_t
58    ParseCompileUnitFunctions (const lldb_private::SymbolContext& sc);
59
60    virtual bool
61    ParseCompileUnitLineTable (const lldb_private::SymbolContext& sc);
62
63    virtual bool
64    ParseCompileUnitSupportFiles (const lldb_private::SymbolContext& sc, lldb_private::FileSpecList &support_files);
65
66    virtual size_t
67    ParseFunctionBlocks (const lldb_private::SymbolContext& sc);
68
69    virtual size_t
70    ParseTypes (const lldb_private::SymbolContext& sc);
71
72    virtual size_t
73    ParseVariablesForContext (const lldb_private::SymbolContext& sc);
74
75    virtual lldb_private::Type*
76    ResolveTypeUID(lldb::user_id_t type_uid);
77
78    virtual lldb::clang_type_t
79    ResolveClangOpaqueTypeDefinition (lldb::clang_type_t clang_Type);
80
81    virtual uint32_t
82    ResolveSymbolContext (const lldb_private::Address& so_addr, uint32_t resolve_scope, lldb_private::SymbolContext& sc);
83
84    virtual uint32_t
85    ResolveSymbolContext (const lldb_private::FileSpec& file_spec, uint32_t line, bool check_inlines, uint32_t resolve_scope, lldb_private::SymbolContextList& sc_list);
86
87    virtual uint32_t
88    FindGlobalVariables(const lldb_private::ConstString &name, const lldb_private::ClangNamespaceDecl *namespace_decl, bool append, uint32_t max_matches, lldb_private::VariableList& variables);
89
90    virtual uint32_t
91    FindGlobalVariables(const lldb_private::RegularExpression& regex, bool append, uint32_t max_matches, lldb_private::VariableList& variables);
92
93    virtual uint32_t
94    FindFunctions(const lldb_private::ConstString &name, const lldb_private::ClangNamespaceDecl *namespace_decl, uint32_t name_type_mask, bool append, lldb_private::SymbolContextList& sc_list);
95
96    virtual uint32_t
97    FindFunctions(const lldb_private::RegularExpression& regex, bool append, lldb_private::SymbolContextList& sc_list);
98
99    virtual uint32_t
100    FindTypes (const lldb_private::SymbolContext& sc,const lldb_private::ConstString &name, const lldb_private::ClangNamespaceDecl *namespace_decl, bool append, uint32_t max_matches, lldb_private::TypeList& types);
101
102//  virtual uint32_t
103//  FindTypes(const lldb_private::SymbolContext& sc, const lldb_private::RegularExpression& regex, bool append, uint32_t max_matches, lldb_private::TypeList& types);
104
105    virtual lldb_private::ClangNamespaceDecl
106    FindNamespace (const lldb_private::SymbolContext& sc,
107                   const lldb_private::ConstString &name,
108                   const lldb_private::ClangNamespaceDecl *parent_namespace_decl);
109
110    //------------------------------------------------------------------
111    // PluginInterface protocol
112    //------------------------------------------------------------------
113    virtual const char *
114    GetPluginName();
115
116    virtual const char *
117    GetShortPluginName();
118
119    virtual uint32_t
120    GetPluginVersion();
121
122protected:
123    typedef std::map<lldb_private::ConstString, lldb::TypeSP> TypeMap;
124
125    lldb_private::Symtab::IndexCollection m_source_indexes;
126    lldb_private::Symtab::IndexCollection m_func_indexes;
127    lldb_private::Symtab::IndexCollection m_code_indexes;
128    lldb_private::Symtab::IndexCollection m_data_indexes;
129    lldb_private::Symtab::NameToIndexMap m_objc_class_name_to_index;
130    TypeMap m_objc_class_types;
131
132    lldb_private::ClangASTContext &
133    GetClangASTContext ();
134
135private:
136    DISALLOW_COPY_AND_ASSIGN (SymbolFileSymtab);
137};
138
139
140#endif  // liblldb_SymbolFileSymtab_h_
141