]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - contrib/llvm/tools/lldb/include/lldb/Core/ValueObjectRegister.h
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / contrib / llvm / tools / lldb / include / lldb / Core / ValueObjectRegister.h
1 //===-- ValueObjectRegister.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_ValueObjectRegister_h_
11 #define liblldb_ValueObjectRegister_h_
12
13 // C Includes
14 // C++ Includes
15 // Other libraries and framework includes
16 // Project includes
17 #include "lldb/lldb-private.h"
18 #include "lldb/Core/RegisterValue.h"
19 #include "lldb/Core/ValueObject.h"
20
21 namespace lldb_private {
22
23 //----------------------------------------------------------------------
24 // A ValueObject that contains a root variable that may or may not
25 // have children.
26 //----------------------------------------------------------------------
27 class ValueObjectRegisterContext : public ValueObject
28 {
29 public:
30
31     virtual
32     ~ValueObjectRegisterContext();
33
34     virtual uint64_t
35     GetByteSize();
36
37     virtual lldb::ValueType
38     GetValueType () const
39     {
40         return lldb::eValueTypeRegisterSet;
41     }
42
43     virtual ConstString
44     GetTypeName();
45     
46     virtual ConstString
47     GetQualifiedTypeName();
48
49     virtual size_t
50     CalculateNumChildren();
51
52     virtual ValueObject *
53     CreateChildAtIndex (size_t idx, bool synthetic_array_member, int32_t synthetic_index);
54
55 protected:
56     virtual bool
57     UpdateValue ();
58     
59     virtual ClangASTType
60     GetClangTypeImpl ();
61
62     lldb::RegisterContextSP m_reg_ctx_sp;
63
64 private:
65     ValueObjectRegisterContext (ValueObject &parent, lldb::RegisterContextSP &reg_ctx_sp);
66     //------------------------------------------------------------------
67     // For ValueObject only
68     //------------------------------------------------------------------
69     DISALLOW_COPY_AND_ASSIGN (ValueObjectRegisterContext);
70 };
71
72 class ValueObjectRegisterSet : public ValueObject
73 {
74 public:
75     static lldb::ValueObjectSP
76     Create (ExecutionContextScope *exe_scope, lldb::RegisterContextSP &reg_ctx_sp, uint32_t set_idx);
77
78     virtual
79     ~ValueObjectRegisterSet();
80
81     virtual uint64_t
82     GetByteSize();
83
84     virtual lldb::ValueType
85     GetValueType () const
86     {
87         return lldb::eValueTypeRegisterSet;
88     }
89
90     virtual ConstString
91     GetTypeName();
92     
93     virtual ConstString
94     GetQualifiedTypeName();
95
96     virtual size_t
97     CalculateNumChildren();
98
99     virtual ValueObject *
100     CreateChildAtIndex (size_t idx, bool synthetic_array_member, int32_t synthetic_index);
101     
102     virtual lldb::ValueObjectSP
103     GetChildMemberWithName (const ConstString &name, bool can_create);
104
105     virtual size_t
106     GetIndexOfChildWithName (const ConstString &name);
107
108
109 protected:
110     virtual bool
111     UpdateValue ();
112     
113     virtual ClangASTType
114     GetClangTypeImpl ();
115
116     lldb::RegisterContextSP m_reg_ctx_sp;
117     const RegisterSet *m_reg_set;
118     uint32_t m_reg_set_idx;
119
120 private:
121     friend class ValueObjectRegisterContext;
122     ValueObjectRegisterSet (ExecutionContextScope *exe_scope, lldb::RegisterContextSP &reg_ctx_sp, uint32_t set_idx);
123
124     //------------------------------------------------------------------
125     // For ValueObject only
126     //------------------------------------------------------------------
127     DISALLOW_COPY_AND_ASSIGN (ValueObjectRegisterSet);
128 };
129
130 class ValueObjectRegister : public ValueObject
131 {
132 public:
133     static lldb::ValueObjectSP
134     Create (ExecutionContextScope *exe_scope, lldb::RegisterContextSP &reg_ctx_sp, uint32_t reg_num);
135
136     virtual
137     ~ValueObjectRegister();
138
139     virtual uint64_t
140     GetByteSize();
141
142     virtual lldb::ValueType
143     GetValueType () const
144     {
145         return lldb::eValueTypeRegister;
146     }
147
148     virtual ConstString
149     GetTypeName();
150
151     virtual size_t
152     CalculateNumChildren();
153     
154     virtual bool
155     SetValueFromCString (const char *value_str, Error& error);
156     
157     virtual bool
158     SetData (DataExtractor &data, Error &error);
159
160     virtual bool
161     ResolveValue (Scalar &scalar);
162     
163     virtual void
164     GetExpressionPath (Stream &s, bool qualify_cxx_base_classes, GetExpressionPathFormat epformat = eGetExpressionPathFormatDereferencePointers);
165
166 protected:
167     virtual bool
168     UpdateValue ();
169     
170     virtual ClangASTType
171     GetClangTypeImpl ();
172
173     lldb::RegisterContextSP m_reg_ctx_sp;
174     RegisterInfo m_reg_info;
175     RegisterValue m_reg_value;
176     ConstString m_type_name;
177     ClangASTType m_clang_type;
178
179 private:
180     void
181     ConstructObject (uint32_t reg_num);
182     
183     friend class ValueObjectRegisterSet;
184     ValueObjectRegister (ValueObject &parent, lldb::RegisterContextSP &reg_ctx_sp, uint32_t reg_num);
185     ValueObjectRegister (ExecutionContextScope *exe_scope, lldb::RegisterContextSP &reg_ctx_sp, uint32_t reg_num);
186
187     //------------------------------------------------------------------
188     // For ValueObject only
189     //------------------------------------------------------------------
190     DISALLOW_COPY_AND_ASSIGN (ValueObjectRegister);
191 };
192
193 } // namespace lldb_private
194
195 #endif  // liblldb_ValueObjectRegister_h_