]> CyberLeo.Net >> Repos - FreeBSD/stable/10.git/blob - contrib/llvm/tools/lldb/include/lldb/API/SBType.h
Copy head (r256279) to stable/10 as part of the 10.0-RELEASE cycle.
[FreeBSD/stable/10.git] / contrib / llvm / tools / lldb / include / lldb / API / SBType.h
1 //===-- SBType.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 LLDB_SBType_h_
11 #define LLDB_SBType_h_
12
13 #include "lldb/API/SBDefines.h"
14
15 namespace lldb {
16
17 class SBTypeList;    
18
19 class SBTypeMember
20 {
21 public:
22     SBTypeMember ();
23     
24     SBTypeMember (const lldb::SBTypeMember& rhs);
25     
26     ~SBTypeMember();
27
28     lldb::SBTypeMember&
29     operator = (const lldb::SBTypeMember& rhs);
30
31     bool
32     IsValid() const;
33     
34     const char *
35     GetName ();
36     
37     lldb::SBType
38     GetType ();
39     
40     uint64_t
41     GetOffsetInBytes();
42     
43     uint64_t
44     GetOffsetInBits();
45
46     bool
47     IsBitfield();
48     
49     uint32_t
50     GetBitfieldSizeInBits();
51
52     bool
53     GetDescription (lldb::SBStream &description, 
54                     lldb::DescriptionLevel description_level);
55     
56 protected:
57     friend class SBType;
58
59     void
60     reset (lldb_private::TypeMemberImpl *);
61
62     lldb_private::TypeMemberImpl &
63     ref ();
64
65     const lldb_private::TypeMemberImpl &
66     ref () const;
67
68     std::unique_ptr<lldb_private::TypeMemberImpl> m_opaque_ap;
69 };
70
71 class SBType
72 {
73 public:
74
75     SBType();
76
77     SBType (const lldb::SBType &rhs);
78
79     ~SBType ();
80
81     bool
82     IsValid() const;
83     
84     uint64_t
85     GetByteSize();
86
87     bool
88     IsPointerType();
89     
90     bool
91     IsReferenceType();
92     
93     bool
94     IsFunctionType ();
95     
96     bool
97     IsPolymorphicClass ();
98     
99     lldb::SBType
100     GetPointerType();
101     
102     lldb::SBType
103     GetPointeeType();
104     
105     lldb::SBType
106     GetReferenceType();
107     
108     lldb::SBType
109     GetDereferencedType();
110
111     lldb::SBType
112     GetUnqualifiedType();
113
114     lldb::SBType
115     GetCanonicalType();
116     // Get the "lldb::BasicType" enumeration for a type. If a type is not a basic
117     // type eBasicTypeInvalid will be returned
118     lldb::BasicType
119     GetBasicType();
120
121     // The call below confusing and should really be renamed to "CreateBasicType"
122     lldb::SBType
123     GetBasicType(lldb::BasicType type);
124     
125     uint32_t
126     GetNumberOfFields ();
127     
128     uint32_t
129     GetNumberOfDirectBaseClasses ();
130
131     uint32_t
132     GetNumberOfVirtualBaseClasses ();
133     
134     lldb::SBTypeMember
135     GetFieldAtIndex (uint32_t idx);
136     
137     lldb::SBTypeMember
138     GetDirectBaseClassAtIndex (uint32_t idx);
139
140     lldb::SBTypeMember
141     GetVirtualBaseClassAtIndex (uint32_t idx);
142
143     uint32_t
144     GetNumberOfTemplateArguments ();
145     
146     lldb::SBType
147     GetTemplateArgumentType (uint32_t idx);
148
149     lldb::TemplateArgumentKind
150     GetTemplateArgumentKind (uint32_t idx);
151
152     lldb::SBType
153     GetFunctionReturnType ();
154
155     lldb::SBTypeList
156     GetFunctionArgumentTypes ();
157
158     const char*
159     GetName();
160     
161     lldb::TypeClass
162     GetTypeClass ();
163     
164     bool
165     IsTypeComplete ();
166
167     bool
168     GetDescription (lldb::SBStream &description, 
169                     lldb::DescriptionLevel description_level);
170
171     lldb::SBType &
172     operator = (const lldb::SBType &rhs);
173     
174     bool
175     operator == (lldb::SBType &rhs);
176     
177     bool
178     operator != (lldb::SBType &rhs);
179     
180 protected:
181
182     lldb_private::TypeImpl &
183     ref ();
184     
185     const lldb_private::TypeImpl &
186     ref () const;
187     
188     lldb::TypeImplSP
189     GetSP ();
190
191     void
192     SetSP (const lldb::TypeImplSP &type_impl_sp);    
193
194     lldb::TypeImplSP m_opaque_sp;
195     
196     friend class SBFunction;
197     friend class SBModule;
198     friend class SBTarget;
199     friend class SBTypeNameSpecifier;
200     friend class SBTypeMember;
201     friend class SBTypeList;
202     friend class SBValue;
203         
204     SBType (const lldb_private::ClangASTType &);
205     SBType (const lldb::TypeSP &);
206     SBType (const lldb::TypeImplSP &);
207     
208 };
209     
210 class SBTypeList
211 {
212 public:
213     SBTypeList();
214     
215     SBTypeList(const lldb::SBTypeList& rhs);
216     
217     ~SBTypeList();
218
219     lldb::SBTypeList&
220     operator = (const lldb::SBTypeList& rhs);
221     
222     bool
223     IsValid();
224
225     void
226     Append (lldb::SBType type);
227     
228     lldb::SBType
229     GetTypeAtIndex (uint32_t index);
230     
231     uint32_t
232     GetSize();
233     
234     
235 private:
236     std::unique_ptr<lldb_private::TypeListImpl> m_opaque_ap;
237     friend class SBModule;
238     friend class SBCompileUnit;
239 };
240     
241
242 } // namespace lldb
243
244 #endif // LLDB_SBType_h_