]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/lldb/include/lldb/Core/ValueObjectDynamicValue.h
Import mandoc cvs snapshot 20170121 (pre 1.14)
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / lldb / include / lldb / Core / ValueObjectDynamicValue.h
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     ~ValueObjectDynamicValue() override;
30
31     uint64_t
32     GetByteSize() override;
33
34     ConstString
35     GetTypeName() override;
36
37     ConstString
38     GetQualifiedTypeName() override;
39
40     ConstString
41     GetDisplayTypeName() override;
42     
43     size_t
44     CalculateNumChildren(uint32_t max) override;
45
46     lldb::ValueType
47     GetValueType() const override;
48
49     bool
50     IsInScope() override;
51     
52     bool
53     IsDynamic() override
54     {
55         return true;
56     }
57     
58     bool
59     IsBaseClass () override
60     {
61         if (m_parent)
62             return m_parent->IsBaseClass();
63         return false;
64     }
65     
66     bool
67     GetIsConstant() const override
68     {
69         return false;
70     }
71     
72     ValueObject *
73     GetParent() override
74     {
75         return ((m_parent != nullptr) ? m_parent->GetParent() : nullptr);
76     }
77
78     const ValueObject *
79     GetParent() const override
80     {
81         return ((m_parent != nullptr) ? m_parent->GetParent() : nullptr);
82     }
83
84     lldb::ValueObjectSP
85     GetStaticValue() override
86     {
87         return m_parent->GetSP();
88     }
89
90     void
91     SetOwningSP (lldb::ValueObjectSP &owning_sp)
92     {
93         if (m_owning_valobj_sp == owning_sp)
94             return;
95             
96         assert (m_owning_valobj_sp.get() == nullptr);
97         m_owning_valobj_sp = owning_sp;
98     }
99     
100     bool
101     SetValueFromCString(const char *value_str, Error& error) override;
102     
103     bool
104     SetData(DataExtractor &data, Error &error) override;
105     
106     TypeImpl
107     GetTypeImpl() override;
108     
109     lldb::VariableSP
110     GetVariable () override
111     {
112         return m_parent ? m_parent->GetVariable() : nullptr;
113     }
114     
115     lldb::LanguageType
116     GetPreferredDisplayLanguage() override;
117     
118     void
119     SetPreferredDisplayLanguage (lldb::LanguageType);
120         
121     bool
122     IsSyntheticChildrenGenerated () override;
123     
124     void
125     SetSyntheticChildrenGenerated (bool b) override;
126     
127     bool
128     GetDeclaration(Declaration &decl) override;
129     
130     uint64_t
131     GetLanguageFlags () override;
132     
133     void
134     SetLanguageFlags (uint64_t flags) override;
135
136 protected:
137     bool
138     UpdateValue() override;
139     
140     LazyBool
141     CanUpdateWithInvalidExecutionContext() override
142     {
143         return eLazyBoolYes;
144     }
145     
146     lldb::DynamicValueType
147     GetDynamicValueTypeImpl() override
148     {
149         return m_use_dynamic;
150     }
151     
152     bool
153     HasDynamicValueTypeInfo() override
154     {
155         return true;
156     }
157     
158     CompilerType
159     GetCompilerTypeImpl() override;
160
161     Address  m_address;  ///< The variable that this value object is based upon
162     TypeAndOrName m_dynamic_type_info; // We can have a type_sp or just a name
163     lldb::ValueObjectSP m_owning_valobj_sp;
164     lldb::DynamicValueType m_use_dynamic;
165     TypeImpl m_type_impl;
166
167 private:
168     friend class ValueObject;
169     friend class ValueObjectConstResult;
170     ValueObjectDynamicValue (ValueObject &parent, lldb::DynamicValueType use_dynamic);
171
172     DISALLOW_COPY_AND_ASSIGN (ValueObjectDynamicValue);
173 };
174
175 } // namespace lldb_private
176
177 #endif // liblldb_ValueObjectDynamicValue_h_