ValueObjectDynamicValue.h revision 3b83055d13d30e8b10a15d04cd0619265e029158
1674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen//===-- ValueObjectDynamicValue.h -----------------------------------*- C++ -*-===//
2674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen//
3674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen//                     The LLVM Compiler Infrastructure
4674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen//
5674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen// This file is distributed under the University of Illinois Open Source
6674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen// License. See LICENSE.TXT for details.
7674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen//
8674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen//===----------------------------------------------------------------------===//
9674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
10674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen#ifndef liblldb_ValueObjectDynamicValue_h_
11674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen#define liblldb_ValueObjectDynamicValue_h_
12674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
13674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen// C Includes
14674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen// C++ Includes
15674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen// Other libraries and framework includes
16674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen// Project includes
17674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen#include "lldb/Core/ValueObject.h"
18674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen#include "lldb/Symbol/Type.h"
19674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
20674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogennamespace lldb_private {
21674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
22674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen//----------------------------------------------------------------------
23// A ValueObject that represents memory at a given address, viewed as some
24// set lldb type.
25//----------------------------------------------------------------------
26class ValueObjectDynamicValue : public ValueObject
27{
28public:
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
93protected:
94    virtual bool
95    UpdateValue ();
96
97    virtual lldb::DynamicValueType
98    GetDynamicValueTypeImpl ()
99    {
100        return m_use_dynamic;
101    }
102
103    virtual bool
104    HasDynamicValueTypeInfo ()
105    {
106        return true;
107    }
108
109    virtual clang::ASTContext *
110    GetClangASTImpl ();
111
112    virtual lldb::clang_type_t
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
120private:
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