]> CyberLeo.Net >> Repos - FreeBSD/releng/10.2.git/blob - contrib/llvm/tools/lldb/include/lldb/Symbol/Variable.h
- Copy stable/10@285827 to releng/10.2 in preparation for 10.2-RC1
[FreeBSD/releng/10.2.git] / contrib / llvm / tools / lldb / include / lldb / Symbol / Variable.h
1 //===-- Variable.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_Variable_h_
11 #define liblldb_Variable_h_
12
13 #include <vector>
14
15 #include "lldb/lldb-private.h"
16 #include "lldb/lldb-enumerations.h"
17 #include "lldb/Core/Mangled.h"
18 #include "lldb/Core/UserID.h"
19 #include "lldb/Expression/DWARFExpression.h"
20 #include "lldb/Symbol/Declaration.h"
21
22 namespace lldb_private {
23
24 class Variable : public UserID
25 {
26 public:
27     //------------------------------------------------------------------
28     // Constructors and Destructors
29     //------------------------------------------------------------------
30     Variable (lldb::user_id_t uid,
31               const char *name, 
32               const char *mangled,   // The mangled variable name for variables in namespaces
33               const lldb::SymbolFileTypeSP &symfile_type_sp,
34               lldb::ValueType scope,
35               SymbolContextScope *owner_scope,
36               Declaration* decl,
37               const DWARFExpression& location,
38               bool external,
39               bool artificial);
40
41     virtual
42     ~Variable();
43
44     void
45     Dump(Stream *s, bool show_context) const;
46
47     bool
48     DumpDeclaration (Stream *s, 
49                      bool show_fullpaths, 
50                      bool show_module);
51     
52     const Declaration&
53     GetDeclaration() const
54     {
55         return m_declaration;
56     }
57
58     const ConstString&
59     GetName() const;
60
61     SymbolContextScope *
62     GetSymbolContextScope() const
63     {
64         return m_owner_scope;
65     }
66
67     // Since a variable can have a basename "i" and also a mangled 
68     // named "_ZN12_GLOBAL__N_11iE" and a demangled mangled name 
69     // "(anonymous namespace)::i", this function will allow a generic match
70     // function that can be called by commands and expression parsers to make
71     // sure we match anything we come across.
72     bool
73     NameMatches (const ConstString &name) const
74     {
75         if (m_name == name)
76             return true;
77         return m_mangled.NameMatches (name);
78     }
79
80     bool
81     NameMatches (const RegularExpression& regex) const;
82
83     Type *
84     GetType();
85
86     lldb::ValueType
87     GetScope() const
88     {
89         return m_scope;
90     }
91
92     bool
93     IsExternal() const
94     {
95         return m_external;
96     }
97
98     bool
99     IsArtificial() const
100     {
101         return m_artificial;
102     }
103
104     DWARFExpression &
105     LocationExpression()
106     {
107         return m_location;
108     }
109
110     const DWARFExpression &
111     LocationExpression() const
112     {
113         return m_location;
114     }
115     
116     bool
117     DumpLocationForAddress (Stream *s, 
118                             const Address &address);
119
120     size_t
121     MemorySize() const;
122
123     void
124     CalculateSymbolContext (SymbolContext *sc);
125
126     bool
127     IsInScope (StackFrame *frame);
128
129     bool
130     LocationIsValidForFrame (StackFrame *frame);
131
132     bool
133     LocationIsValidForAddress (const Address &address);
134     
135     bool
136     GetLocationIsConstantValueData () const
137     {
138         return m_loc_is_const_data;
139     }
140     
141     void
142     SetLocationIsConstantValueData (bool b)
143     {
144         m_loc_is_const_data = b;
145     }
146     
147     typedef size_t (*GetVariableCallback) (void *baton,
148                                            const char *name,
149                                            VariableList &var_list);
150
151
152     static Error
153     GetValuesForVariableExpressionPath (const char *variable_expr_path,
154                                         ExecutionContextScope *scope,
155                                         GetVariableCallback callback,
156                                         void *baton,
157                                         VariableList &variable_list,
158                                         ValueObjectList &valobj_list);
159
160     static size_t
161     AutoComplete (const ExecutionContext &exe_ctx,
162                   const char *name,
163                   StringList &matches,
164                   bool &word_complete);
165
166 protected:
167     ConstString m_name;                 // The basename of the variable (no namespaces)
168     Mangled m_mangled;                  // The mangled name of the variable
169     lldb::SymbolFileTypeSP m_symfile_type_sp;   // The type pointer of the variable (int, struct, class, etc)
170     lldb::ValueType m_scope;            // global, parameter, local
171     SymbolContextScope *m_owner_scope;  // The symbol file scope that this variable was defined in
172     Declaration m_declaration;          // Declaration location for this item.
173     DWARFExpression m_location;         // The location of this variable that can be fed to DWARFExpression::Evaluate()
174     uint8_t m_external:1,               // Visible outside the containing compile unit?
175             m_artificial:1,             // Non-zero if the variable is not explicitly declared in source
176             m_loc_is_const_data:1;      // The m_location expression contains the constant variable value data, not a DWARF location
177 private:
178     Variable(const Variable& rhs);
179     Variable& operator=(const Variable& rhs);
180 };
181
182 } // namespace lldb_private
183
184 #endif  // liblldb_Variable_h_