| //===-- Variable.h ----------------------------------------------*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef liblldb_Variable_h_ |
| #define liblldb_Variable_h_ |
| |
| #include <vector> |
| |
| #include "lldb/lldb-private.h" |
| #include "lldb/lldb-enumerations.h" |
| #include "lldb/Core/Mangled.h" |
| #include "lldb/Core/UserID.h" |
| #include "lldb/Expression/DWARFExpression.h" |
| #include "lldb/Symbol/Declaration.h" |
| |
| namespace lldb_private { |
| |
| class Variable : public UserID |
| { |
| public: |
| //------------------------------------------------------------------ |
| // Constructors and Destructors |
| //------------------------------------------------------------------ |
| Variable (lldb::user_id_t uid, |
| const char *name, |
| const char *mangled, // The mangled variable name for variables in namespaces |
| const lldb::SymbolFileTypeSP &symfile_type_sp, |
| lldb::ValueType scope, |
| SymbolContextScope *owner_scope, |
| Declaration* decl, |
| const DWARFExpression& location, |
| bool external, |
| bool artificial); |
| |
| virtual |
| ~Variable(); |
| |
| void |
| Dump(Stream *s, bool show_context) const; |
| |
| bool |
| DumpDeclaration (Stream *s, |
| bool show_fullpaths, |
| bool show_module); |
| |
| const Declaration& |
| GetDeclaration() const |
| { |
| return m_declaration; |
| } |
| |
| const ConstString& |
| GetName() const; |
| |
| SymbolContextScope * |
| GetSymbolContextScope() const |
| { |
| return m_owner_scope; |
| } |
| |
| // Since a variable can have a basename "i" and also a mangled |
| // named "_ZN12_GLOBAL__N_11iE" and a demangled mangled name |
| // "(anonymous namespace)::i", this function will allow a generic match |
| // function that can be called by commands and expression parsers to make |
| // sure we match anything we come across. |
| bool |
| NameMatches (const ConstString &name) const |
| { |
| if (m_name == name) |
| return true; |
| return m_mangled.NameMatches (name); |
| } |
| |
| bool |
| NameMatches (const RegularExpression& regex) const; |
| |
| Type * |
| GetType(); |
| |
| lldb::ValueType |
| GetScope() const |
| { |
| return m_scope; |
| } |
| |
| bool |
| IsExternal() const |
| { |
| return m_external; |
| } |
| |
| bool |
| IsArtificial() const |
| { |
| return m_artificial; |
| } |
| |
| DWARFExpression & |
| LocationExpression() |
| { |
| return m_location; |
| } |
| |
| const DWARFExpression & |
| LocationExpression() const |
| { |
| return m_location; |
| } |
| |
| bool |
| DumpLocationForAddress (Stream *s, |
| const Address &address); |
| |
| size_t |
| MemorySize() const; |
| |
| void |
| CalculateSymbolContext (SymbolContext *sc); |
| |
| bool |
| IsInScope (StackFrame *frame); |
| |
| bool |
| LocationIsValidForFrame (StackFrame *frame); |
| |
| bool |
| LocationIsValidForAddress (const Address &address); |
| |
| bool |
| GetLocationIsConstantValueData () const |
| { |
| return m_loc_is_const_data; |
| } |
| |
| void |
| SetLocationIsConstantValueData (bool b) |
| { |
| m_loc_is_const_data = b; |
| } |
| |
| typedef size_t (*GetVariableCallback) (void *baton, |
| const char *name, |
| VariableList &var_list); |
| |
| |
| static Error |
| GetValuesForVariableExpressionPath (const char *variable_expr_path, |
| ExecutionContextScope *scope, |
| GetVariableCallback callback, |
| void *baton, |
| VariableList &variable_list, |
| ValueObjectList &valobj_list); |
| |
| static size_t |
| AutoComplete (const ExecutionContext &exe_ctx, |
| const char *name, |
| StringList &matches, |
| bool &word_complete); |
| |
| protected: |
| ConstString m_name; // The basename of the variable (no namespaces) |
| Mangled m_mangled; // The mangled name of the variable |
| lldb::SymbolFileTypeSP m_symfile_type_sp; // The type pointer of the variable (int, struct, class, etc) |
| lldb::ValueType m_scope; // global, parameter, local |
| SymbolContextScope *m_owner_scope; // The symbol file scope that this variable was defined in |
| Declaration m_declaration; // Declaration location for this item. |
| DWARFExpression m_location; // The location of this variable that can be fed to DWARFExpression::Evaluate() |
| uint8_t m_external:1, // Visible outside the containing compile unit? |
| m_artificial:1, // Non-zero if the variable is not explicitly declared in source |
| m_loc_is_const_data:1; // The m_location expression contains the constant variable value data, not a DWARF location |
| private: |
| Variable(const Variable& rhs); |
| Variable& operator=(const Variable& rhs); |
| }; |
| |
| } // namespace lldb_private |
| |
| #endif // liblldb_Variable_h_ |