Home | History | Annotate | Download | only in Core
      1 //===-- ValueObjectDynamicValue.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_ValueObjectDynamicValue_h_
     11 #define liblldb_ValueObjectDynamicValue_h_
     12 
     13 // C Includes
     14 // C++ Includes
     15 // Other libraries and framework includes
     16 // Project includes
     17 #include "lldb/Core/ValueObject.h"
     18 #include "lldb/Symbol/Type.h"
     19 
     20 namespace lldb_private {
     21 
     22 //----------------------------------------------------------------------
     23 // A ValueObject that represents memory at a given address, viewed as some
     24 // set lldb type.
     25 //----------------------------------------------------------------------
     26 class ValueObjectDynamicValue : public ValueObject
     27 {
     28 public:
     29     virtual
     30     ~ValueObjectDynamicValue();
     31 
     32     virtual uint64_t
     33     GetByteSize();
     34 
     35     virtual ConstString
     36     GetTypeName();
     37 
     38     virtual ConstString
     39     GetQualifiedTypeName();
     40 
     41     virtual size_t
     42     CalculateNumChildren();
     43 
     44     virtual lldb::ValueType
     45     GetValueType() const;
     46 
     47     virtual bool
     48     IsInScope ();
     49 
     50     virtual bool
     51     IsDynamic ()
     52     {
     53         return true;
     54     }
     55 
     56     virtual ValueObject *
     57     GetParent()
     58     {
     59         if (m_parent)
     60             return m_parent->GetParent();
     61         else
     62             return NULL;
     63     }
     64 
     65     virtual const ValueObject *
     66     GetParent() const
     67     {
     68         if (m_parent)
     69             return m_parent->GetParent();
     70         else
     71             return NULL;
     72     }
     73 
     74     virtual lldb::ValueObjectSP
     75     GetStaticValue ()
     76     {
     77         return m_parent->GetSP();
     78     }
     79 
     80     void
     81     SetOwningSP (lldb::ValueObjectSP &owning_sp)
     82     {
     83         if (m_owning_valobj_sp == owning_sp)
     84             return;
     85 
     86         assert (m_owning_valobj_sp.get() == NULL);
     87         m_owning_valobj_sp = owning_sp;
     88     }
     89 
     90     virtual bool
     91     SetValueFromCString (const char *value_str, Error& error);
     92 
     93     virtual bool
     94     SetData (DataExtractor &data, Error &error);
     95 
     96 protected:
     97     virtual bool
     98     UpdateValue ();
     99 
    100     virtual lldb::DynamicValueType
    101     GetDynamicValueTypeImpl ()
    102     {
    103         return m_use_dynamic;
    104     }
    105 
    106     virtual bool
    107     HasDynamicValueTypeInfo ()
    108     {
    109         return true;
    110     }
    111 
    112     virtual ClangASTType
    113     GetClangTypeImpl ();
    114 
    115     Address  m_address;  ///< The variable that this value object is based upon
    116     TypeAndOrName m_dynamic_type_info; // We can have a type_sp or just a name
    117     lldb::ValueObjectSP m_owning_valobj_sp;
    118     lldb::DynamicValueType m_use_dynamic;
    119 
    120 private:
    121     friend class ValueObject;
    122     friend class ValueObjectConstResult;
    123     ValueObjectDynamicValue (ValueObject &parent, lldb::DynamicValueType use_dynamic);
    124 
    125     //------------------------------------------------------------------
    126     // For ValueObject only
    127     //------------------------------------------------------------------
    128     DISALLOW_COPY_AND_ASSIGN (ValueObjectDynamicValue);
    129 };
    130 
    131 } // namespace lldb_private
    132 
    133 #endif  // liblldb_ValueObjectDynamicValue_h_
    134