LLDB mainline
CompilerType.h
Go to the documentation of this file.
1//===-- CompilerType.h ------------------------------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef LLDB_SYMBOL_COMPILERTYPE_H
10#define LLDB_SYMBOL_COMPILERTYPE_H
11
12#include <functional>
13#include <optional>
14#include <string>
15#include <vector>
16
17#include "lldb/lldb-private.h"
18#include "llvm/ADT/APSInt.h"
19#include "llvm/Support/Casting.h"
20
21namespace lldb_private {
22
23class DataExtractor;
24class TypeSystem;
25
26/// Generic representation of a type in a programming language.
27///
28/// This class serves as an abstraction for a type inside one of the TypeSystems
29/// implemented by the language plugins. It does not have any actual logic in it
30/// but only stores an opaque pointer and a pointer to the TypeSystem that
31/// gives meaning to this opaque pointer. All methods of this class should call
32/// their respective method in the TypeSystem interface and pass the opaque
33/// pointer along.
34///
35/// \see lldb_private::TypeSystem
37public:
38 /// Creates a CompilerType with the given TypeSystem and opaque compiler type.
39 ///
40 /// This constructor should only be called from the respective TypeSystem
41 /// implementation.
42 ///
43 /// \see lldb_private::TypeSystemClang::GetType(clang::QualType)
46
47 /// This is a minimal wrapper of a TypeSystem shared pointer as
48 /// returned by CompilerType which conventien dyn_cast support.
51
52 public:
55 : m_typesystem_sp(typesystem_sp) {}
56
57 template <class TypeSystemType> bool isa_and_nonnull() {
58 if (auto *ts = m_typesystem_sp.get())
59 return llvm::isa<TypeSystemType>(ts);
60 return false;
61 }
62
63 /// Return a shared_ptr<TypeSystemType> if dyn_cast succeeds.
64 template <class TypeSystemType>
65 std::shared_ptr<TypeSystemType> dyn_cast_or_null() {
66 if (isa_and_nonnull<TypeSystemType>())
67 return std::shared_ptr<TypeSystemType>(
68 m_typesystem_sp, llvm::cast<TypeSystemType>(m_typesystem_sp.get()));
69 return nullptr;
70 }
71
72 explicit operator bool() const {
73 return static_cast<bool>(m_typesystem_sp);
74 }
75 bool operator==(const TypeSystemSPWrapper &other) const;
76 bool operator!=(const TypeSystemSPWrapper &other) const {
77 return !(*this == other);
78 }
79
80 /// Only to be used in a one-off situations like
81 /// if (typesystem && typesystem->method())
82 /// Do not store this pointer!
83 TypeSystem *operator->() const;
84
86 };
87
88 CompilerType(TypeSystemSPWrapper type_system,
90
93
94 CompilerType() = default;
95
96 /// Operators.
97 /// \{
98 const CompilerType &operator=(const CompilerType &rhs) {
100 m_type = rhs.m_type;
101 return *this;
102 }
103
104 bool operator<(const CompilerType &rhs) const {
105 auto lts = m_type_system.lock();
106 auto rts = rhs.m_type_system.lock();
107 if (lts.get() == rts.get())
108 return m_type < rhs.m_type;
109 return lts.get() < rts.get();
110 }
111 /// \}
112
113 /// Tests.
114 /// \{
115 explicit operator bool() const {
116 return m_type_system.lock() && m_type;
117 }
118
119 bool IsValid() const { return (bool)*this; }
120
121 bool IsArrayType(CompilerType *element_type = nullptr,
122 uint64_t *size = nullptr,
123 bool *is_incomplete = nullptr) const;
124
125 bool IsVectorType(CompilerType *element_type = nullptr,
126 uint64_t *size = nullptr) const;
127
128 bool IsArrayOfScalarType() const;
129
130 bool IsAggregateType() const;
131
132 bool IsAnonymousType() const;
133
134 bool IsScopedEnumerationType() const;
135
136 bool IsBeingDefined() const;
137
138 bool IsCharType() const;
139
140 bool IsCompleteType() const;
141
142 bool IsConst() const;
143
144 bool IsDefined() const;
145
146 bool IsFloatingPointType(uint32_t &count, bool &is_complex) const;
147
148 bool IsFunctionType() const;
149
150 uint32_t IsHomogeneousAggregate(CompilerType *base_type_ptr) const;
151
152 size_t GetNumberOfFunctionArguments() const;
153
154 CompilerType GetFunctionArgumentAtIndex(const size_t index) const;
155
157
158 bool IsFunctionPointerType() const;
159
160 bool IsMemberFunctionPointerType() const;
161
162 bool
163 IsBlockPointerType(CompilerType *function_pointer_type_ptr = nullptr) const;
164
165 bool IsIntegerType(bool &is_signed) const;
166
167 bool IsEnumerationType(bool &is_signed) const;
168
169 bool IsIntegerOrEnumerationType(bool &is_signed) const;
170
171 bool IsPolymorphicClass() const;
172
173 /// \param target_type Can pass nullptr.
174 bool IsPossibleDynamicType(CompilerType *target_type, bool check_cplusplus,
175 bool check_objc) const;
176
177 bool IsPointerToScalarType() const;
178
179 bool IsRuntimeGeneratedType() const;
180
181 bool IsPointerType(CompilerType *pointee_type = nullptr) const;
182
183 bool IsPointerOrReferenceType(CompilerType *pointee_type = nullptr) const;
184
185 bool IsReferenceType(CompilerType *pointee_type = nullptr,
186 bool *is_rvalue = nullptr) const;
187
189
190 bool IsScalarType() const;
191
192 bool IsTemplateType() const;
193
194 bool IsTypedefType() const;
195
196 bool IsVoidType() const;
197
198 /// This is used when you don't care about the signedness of the integer.
199 bool IsInteger() const;
200
201 bool IsFloat() const;
202
203 /// This is used when you don't care about the signedness of the enum.
204 bool IsEnumerationType() const;
205
206 bool IsUnscopedEnumerationType() const;
207
209
210 bool IsSigned() const;
211
212 bool IsNullPtrType() const;
213
214 bool IsBoolean() const;
215
217
219
220 bool IsPromotableIntegerType() const;
221
222 bool IsPointerToVoid() const;
223
224 bool IsRecordType() const;
225
226 //// Checks whether `target_base` is a virtual base of `type` (direct or
227 /// indirect). If it is, stores the first virtual base type on the path from
228 /// `type` to `target_type`. Parameter "virtual_base" is where the first
229 /// virtual base type gets stored. Parameter "carry_virtual" is used to
230 /// denote that we're in a recursive check of virtual base classes and we
231 /// have already seen a virtual base class (so should only check direct
232 /// base classes).
233 /// Note: This may only be defined in TypeSystemClang.
234 bool IsVirtualBase(CompilerType target_base, CompilerType *virtual_base,
235 bool carry_virtual = false) const;
236
237 /// This may only be defined in TypeSystemClang.
239
240 bool IsBasicType() const;
241
242 std::string TypeDescription();
243
244 bool CompareTypes(CompilerType rhs) const;
245
246 const char *GetTypeTag();
247
248 /// Go through the base classes and count non-empty ones.
250
251 /// \}
252
253 /// Type Completion.
254 /// \{
255 bool GetCompleteType() const;
256 /// \}
257
258 bool IsForcefullyCompleted() const;
259
260 /// AST related queries.
261 /// \{
262 size_t GetPointerByteSize() const;
263 /// \}
264
265 /// Accessors.
266 /// \{
267
268 /// Returns a shared pointer to the type system. The
269 /// TypeSystem::TypeSystemSPWrapper can be compared for equality.
271
272 ConstString GetTypeName(bool BaseOnly = false) const;
273
275
276 uint32_t
277 GetTypeInfo(CompilerType *pointee_or_element_compiler_type = nullptr) const;
278
280
282
283 lldb::TypeClass GetTypeClass() const;
284
285 void SetCompilerType(lldb::TypeSystemWP type_system,
287 void SetCompilerType(TypeSystemSPWrapper type_system,
289
290 unsigned GetTypeQualifiers() const;
291 /// \}
292
293 /// Creating related types.
294 /// \{
296
297 CompilerType GetArrayType(uint64_t size) const;
298
300
302
304
305 /// Returns -1 if this isn't a function of if the function doesn't
306 /// have a prototype Returns a value >= 0 if there is a prototype.
307 int GetFunctionArgumentCount() const;
308
310
312
313 size_t GetNumMemberFunctions() const;
314
316
317 /// If this type is a reference to a type (L value or R value reference),
318 /// return a new type with the reference removed, else return the current type
319 /// itself.
321
322 /// If this type is a pointer type, return the type that the pointer points
323 /// to, else return an invalid type.
325
326 /// Return a new CompilerType that is a pointer to this type
328
329 /// Return a new CompilerType that is a L value reference to this type if this
330 /// type is valid and the type system supports L value references, else return
331 /// an invalid type.
333
334 /// Return a new CompilerType that is a R value reference to this type if this
335 /// type is valid and the type system supports R value references, else return
336 /// an invalid type.
338
339 /// Return a new CompilerType adds a const modifier to this type if this type
340 /// is valid and the type system supports const modifiers, else return an
341 /// invalid type.
343
344 /// Return a new CompilerType adds a volatile modifier to this type if this
345 /// type is valid and the type system supports volatile modifiers, else return
346 /// an invalid type.
348
349 /// Return a new CompilerType that is the atomic type of this type. If this
350 /// type is not valid or the type system doesn't support atomic types, this
351 /// returns an invalid type.
353
354 /// Return a new CompilerType adds a restrict modifier to this type if this
355 /// type is valid and the type system supports restrict modifiers, else return
356 /// an invalid type.
358
359 /// Create a typedef to this type using "name" as the name of the typedef this
360 /// type is valid and the type system supports typedefs, else return an
361 /// invalid type.
362 /// \param payload The typesystem-specific \p lldb::Type payload.
363 CompilerType CreateTypedef(const char *name,
364 const CompilerDeclContext &decl_ctx,
365 uint32_t payload) const;
366
367 /// If the current object represents a typedef type, get the underlying type
369
370 /// Create related types using the current type's AST
372 /// \}
373
374 /// Exploring the type.
375 /// \{
376 struct IntegralTemplateArgument;
377
378 /// Return the size of the type in bytes.
379 std::optional<uint64_t> GetByteSize(ExecutionContextScope *exe_scope) const;
380 /// Return the size of the type in bits.
381 std::optional<uint64_t> GetBitSize(ExecutionContextScope *exe_scope) const;
382
383 lldb::Encoding GetEncoding(uint64_t &count) const;
384
385 lldb::Format GetFormat() const;
386
387 std::optional<size_t> GetTypeBitAlign(ExecutionContextScope *exe_scope) const;
388
389 llvm::Expected<uint32_t>
390 GetNumChildren(bool omit_empty_base_classes,
391 const ExecutionContext *exe_ctx) const;
392
394
395 /// If this type is an enumeration, iterate through all of its enumerators
396 /// using a callback. If the callback returns true, keep iterating, else abort
397 /// the iteration.
399 std::function<bool(const CompilerType &integer_type, ConstString name,
400 const llvm::APSInt &value)> const &callback) const;
401
402 uint32_t GetNumFields() const;
403
404 CompilerType GetFieldAtIndex(size_t idx, std::string &name,
405 uint64_t *bit_offset_ptr,
406 uint32_t *bitfield_bit_size_ptr,
407 bool *is_bitfield_ptr) const;
408
409 uint32_t GetNumDirectBaseClasses() const;
410
411 uint32_t GetNumVirtualBaseClasses() const;
412
414 uint32_t *bit_offset_ptr) const;
415
417 uint32_t *bit_offset_ptr) const;
418
419 CompilerDecl GetStaticFieldWithName(llvm::StringRef name) const;
420
421 uint32_t GetIndexOfFieldWithName(const char *name,
422 CompilerType *field_compiler_type = nullptr,
423 uint64_t *bit_offset_ptr = nullptr,
424 uint32_t *bitfield_bit_size_ptr = nullptr,
425 bool *is_bitfield_ptr = nullptr) const;
426
428 ExecutionContext *exe_ctx, size_t idx, bool transparent_pointers,
429 bool omit_empty_base_classes, bool ignore_array_bounds,
430 std::string &child_name, uint32_t &child_byte_size,
431 int32_t &child_byte_offset, uint32_t &child_bitfield_bit_size,
432 uint32_t &child_bitfield_bit_offset, bool &child_is_base_class,
433 bool &child_is_deref_of_parent, ValueObject *valobj,
434 uint64_t &language_flags) const;
435
436 /// Lookup a child given a name. This function will match base class names and
437 /// member member names in "clang_type" only, not descendants.
438 uint32_t GetIndexOfChildWithName(llvm::StringRef name,
439 bool omit_empty_base_classes) const;
440
441 /// Lookup a child member given a name. This function will match member names
442 /// only and will descend into "clang_type" children in search for the first
443 /// member in this class, or any base class that matches "name".
444 /// TODO: Return all matches for a given name by returning a
445 /// vector<vector<uint32_t>>
446 /// so we catch all names that match a given child name, not just the first.
447 size_t
448 GetIndexOfChildMemberWithName(llvm::StringRef name,
449 bool omit_empty_base_classes,
450 std::vector<uint32_t> &child_indexes) const;
451
452 CompilerType GetDirectNestedTypeWithName(llvm::StringRef name) const;
453
454 /// Return the number of template arguments the type has.
455 /// If expand_pack is true, then variadic argument packs are automatically
456 /// expanded to their supplied arguments. If it is false an argument pack
457 /// will only count as 1 argument.
458 size_t GetNumTemplateArguments(bool expand_pack = false) const;
459
460 // Return the TemplateArgumentKind of the template argument at index idx.
461 // If expand_pack is true, then variadic argument packs are automatically
462 // expanded to their supplied arguments. With expand_pack set to false, an
463 // arguement pack will count as 1 argument and return a type of Pack.
465 GetTemplateArgumentKind(size_t idx, bool expand_pack = false) const;
467 bool expand_pack = false) const;
468
469 /// Returns the value of the template argument and its type.
470 /// If expand_pack is true, then variadic argument packs are automatically
471 /// expanded to their supplied arguments. With expand_pack set to false, an
472 /// arguement pack will count as 1 argument and it is invalid to call this
473 /// method on the pack argument.
474 std::optional<IntegralTemplateArgument>
475 GetIntegralTemplateArgument(size_t idx, bool expand_pack = false) const;
476
478
480
482 /// \}
483
484 /// Dumping types.
485 /// \{
486#ifndef NDEBUG
487 /// Convenience LLVM-style dump method for use in the debugger only.
488 /// Don't call this function from actual code.
489 LLVM_DUMP_METHOD void dump() const;
490#endif
491
492 bool DumpTypeValue(Stream *s, lldb::Format format, const DataExtractor &data,
493 lldb::offset_t data_offset, size_t data_byte_size,
494 uint32_t bitfield_bit_size, uint32_t bitfield_bit_offset,
495 ExecutionContextScope *exe_scope);
496
497 /// Dump to stdout.
500
501 /// Print a description of the type to a stream. The exact implementation
502 /// varies, but the expectation is that eDescriptionLevelFull returns a
503 /// source-like representation of the type, whereas eDescriptionLevelVerbose
504 /// does a dump of the underlying AST if applicable.
507 /// \}
508
509 bool GetValueAsScalar(const DataExtractor &data, lldb::offset_t data_offset,
510 size_t data_byte_size, Scalar &value,
511 ExecutionContextScope *exe_scope) const;
512 void Clear() {
513 m_type_system = {};
514 m_type = nullptr;
515 }
516
517private:
518#ifndef NDEBUG
519 /// If the type is valid, ask the TypeSystem to verify the integrity
520 /// of the type to catch CompilerTypes that mix and match invalid
521 /// TypeSystem/Opaque type pairs.
522 bool Verify() const;
523#endif
524
527};
528
529bool operator==(const CompilerType &lhs, const CompilerType &rhs);
530bool operator!=(const CompilerType &lhs, const CompilerType &rhs);
531
533 llvm::APSInt value;
535};
536
537} // namespace lldb_private
538
539#endif // LLDB_SYMBOL_COMPILERTYPE_H
Represents a generic declaration context in a program.
Represents a generic declaration such as a function declaration.
Definition: CompilerDecl.h:28
This is a minimal wrapper of a TypeSystem shared pointer as returned by CompilerType which conventien...
Definition: CompilerType.h:49
bool operator!=(const TypeSystemSPWrapper &other) const
Definition: CompilerType.h:76
lldb::TypeSystemSP GetSharedPointer() const
Definition: CompilerType.h:85
bool operator==(const TypeSystemSPWrapper &other) const
std::shared_ptr< TypeSystemType > dyn_cast_or_null()
Return a shared_ptr<TypeSystemType> if dyn_cast succeeds.
Definition: CompilerType.h:65
TypeSystem * operator->() const
Only to be used in a one-off situations like if (typesystem && typesystem->method()) Do not store thi...
TypeSystemSPWrapper(lldb::TypeSystemSP typesystem_sp)
Definition: CompilerType.h:54
Generic representation of a type in a programming language.
Definition: CompilerType.h:36
uint32_t GetNumberOfNonEmptyBaseClasses()
Go through the base classes and count non-empty ones.
CompilerType GetTypeForFormatters() const
CompilerType GetTypeTemplateArgument(size_t idx, bool expand_pack=false) const
lldb::LanguageType GetMinimumLanguage()
bool GetValueAsScalar(const DataExtractor &data, lldb::offset_t data_offset, size_t data_byte_size, Scalar &value, ExecutionContextScope *exe_scope) const
bool Verify() const
If the type is valid, ask the TypeSystem to verify the integrity of the type to catch CompilerTypes t...
lldb::BasicType GetBasicTypeEnumeration() const
std::optional< IntegralTemplateArgument > GetIntegralTemplateArgument(size_t idx, bool expand_pack=false) const
Returns the value of the template argument and its type.
TypeSystemSPWrapper GetTypeSystem() const
Accessors.
CompilerType GetArrayType(uint64_t size) const
CompilerType GetChildCompilerTypeAtIndex(ExecutionContext *exe_ctx, size_t idx, bool transparent_pointers, bool omit_empty_base_classes, bool ignore_array_bounds, std::string &child_name, uint32_t &child_byte_size, int32_t &child_byte_offset, uint32_t &child_bitfield_bit_size, uint32_t &child_bitfield_bit_offset, bool &child_is_base_class, bool &child_is_deref_of_parent, ValueObject *valobj, uint64_t &language_flags) const
CompilerType GetBasicTypeFromAST(lldb::BasicType basic_type) const
Create related types using the current type's AST.
bool IsPossibleDynamicType(CompilerType *target_type, bool check_cplusplus, bool check_objc) const
void SetCompilerType(lldb::TypeSystemWP type_system, lldb::opaque_compiler_type_t type)
std::optional< uint64_t > GetByteSize(ExecutionContextScope *exe_scope) const
Return the size of the type in bytes.
CompilerType AddConstModifier() const
Return a new CompilerType adds a const modifier to this type if this type is valid and the type syste...
lldb::Encoding GetEncoding(uint64_t &count) const
bool IsArrayType(CompilerType *element_type=nullptr, uint64_t *size=nullptr, bool *is_incomplete=nullptr) const
ConstString GetDisplayTypeName() const
CompilerType GetVirtualBaseClassAtIndex(size_t idx, uint32_t *bit_offset_ptr) const
size_t GetNumMemberFunctions() const
CompilerType GetFunctionArgumentTypeAtIndex(size_t idx) const
uint32_t IsHomogeneousAggregate(CompilerType *base_type_ptr) const
CompilerType GetFieldAtIndex(size_t idx, std::string &name, uint64_t *bit_offset_ptr, uint32_t *bitfield_bit_size_ptr, bool *is_bitfield_ptr) const
CompilerType GetRValueReferenceType() const
Return a new CompilerType that is a R value reference to this type if this type is valid and the type...
bool IsIntegerOrUnscopedEnumerationType() const
size_t GetIndexOfChildMemberWithName(llvm::StringRef name, bool omit_empty_base_classes, std::vector< uint32_t > &child_indexes) const
Lookup a child member given a name.
bool IsScalarOrUnscopedEnumerationType() const
CompilerType GetPointerType() const
Return a new CompilerType that is a pointer to this type.
bool IsContextuallyConvertibleToBool() const
This may only be defined in TypeSystemClang.
CompilerDecl GetStaticFieldWithName(llvm::StringRef name) const
lldb::TypeClass GetTypeClass() const
lldb::opaque_compiler_type_t GetOpaqueQualType() const
Definition: CompilerType.h:281
size_t GetNumTemplateArguments(bool expand_pack=false) const
Return the number of template arguments the type has.
CompilerType AddVolatileModifier() const
Return a new CompilerType adds a volatile modifier to this type if this type is valid and the type sy...
bool IsVirtualBase(CompilerType target_base, CompilerType *virtual_base, bool carry_virtual=false) const
Checks whether target_base is a virtual base of type (direct or indirect).
CompilerType AddRestrictModifier() const
Return a new CompilerType adds a restrict modifier to this type if this type is valid and the type sy...
lldb::TypeSystemWP m_type_system
Definition: CompilerType.h:525
CompilerType GetDirectNestedTypeWithName(llvm::StringRef name) const
uint32_t GetNumVirtualBaseClasses() const
size_t GetPointerByteSize() const
AST related queries.
CompilerType GetFunctionArgumentAtIndex(const size_t index) const
CompilerType(const CompilerType &rhs)
Definition: CompilerType.h:91
void ForEachEnumerator(std::function< bool(const CompilerType &integer_type, ConstString name, const llvm::APSInt &value)> const &callback) const
If this type is an enumeration, iterate through all of its enumerators using a callback.
bool IsFloatingPointType(uint32_t &count, bool &is_complex) const
LLVM_DUMP_METHOD void dump() const
Dumping types.
CompilerType GetLValueReferenceType() const
Return a new CompilerType that is a L value reference to this type if this type is valid and the type...
uint32_t GetNumFields() const
bool IsPromotableIntegerType() const
size_t GetNumberOfFunctionArguments() const
bool IsVariadicFunctionType() const
bool IsIntegerOrEnumerationType(bool &is_signed) const
bool IsScopedEnumerationType() const
bool ShouldTreatScalarValueAsAddress() const
CompilerType GetNonReferenceType() const
If this type is a reference to a type (L value or R value reference), return a new type with the refe...
uint32_t GetNumDirectBaseClasses() const
bool IsMeaninglessWithoutDynamicResolution() const
bool IsBlockPointerType(CompilerType *function_pointer_type_ptr=nullptr) const
ConstString GetTypeName(bool BaseOnly=false) const
uint32_t GetIndexOfChildWithName(llvm::StringRef name, bool omit_empty_base_classes) const
Lookup a child given a name.
bool IsEnumerationIntegerTypeSigned() const
CompilerType GetTypedefedType() const
If the current object represents a typedef type, get the underlying type.
bool IsReferenceType(CompilerType *pointee_type=nullptr, bool *is_rvalue=nullptr) const
bool DumpTypeValue(Stream *s, lldb::Format format, const DataExtractor &data, lldb::offset_t data_offset, size_t data_byte_size, uint32_t bitfield_bit_size, uint32_t bitfield_bit_offset, ExecutionContextScope *exe_scope)
CompilerType GetArrayElementType(ExecutionContextScope *exe_scope) const
Creating related types.
bool IsInteger() const
This is used when you don't care about the signedness of the integer.
bool operator<(const CompilerType &rhs) const
Definition: CompilerType.h:104
lldb::Format GetFormat() const
CompilerType GetFullyUnqualifiedType() const
unsigned GetTypeQualifiers() const
CompilerType GetDirectBaseClassAtIndex(size_t idx, uint32_t *bit_offset_ptr) const
std::optional< size_t > GetTypeBitAlign(ExecutionContextScope *exe_scope) const
bool IsFunctionPointerType() const
CompilerType GetPointeeType() const
If this type is a pointer type, return the type that the pointer points to, else return an invalid ty...
bool IsIntegerType(bool &is_signed) const
bool GetCompleteType() const
Type Completion.
bool IsUnscopedEnumerationType() const
uint32_t GetTypeInfo(CompilerType *pointee_or_element_compiler_type=nullptr) const
int GetFunctionArgumentCount() const
Returns -1 if this isn't a function of if the function doesn't have a prototype Returns a value >= 0 ...
std::optional< uint64_t > GetBitSize(ExecutionContextScope *exe_scope) const
Return the size of the type in bits.
uint32_t GetIndexOfFieldWithName(const char *name, CompilerType *field_compiler_type=nullptr, uint64_t *bit_offset_ptr=nullptr, uint32_t *bitfield_bit_size_ptr=nullptr, bool *is_bitfield_ptr=nullptr) const
llvm::Expected< uint32_t > GetNumChildren(bool omit_empty_base_classes, const ExecutionContext *exe_ctx) const
CompilerType GetEnumerationIntegerType() const
const CompilerType & operator=(const CompilerType &rhs)
Operators.
Definition: CompilerType.h:98
lldb::opaque_compiler_type_t m_type
Definition: CompilerType.h:526
bool CompareTypes(CompilerType rhs) const
bool IsForcefullyCompleted() const
bool IsEnumerationType() const
This is used when you don't care about the signedness of the enum.
CompilerType CreateTypedef(const char *name, const CompilerDeclContext &decl_ctx, uint32_t payload) const
Create a typedef to this type using "name" as the name of the typedef this type is valid and the type...
CompilerType GetFunctionReturnType() const
bool IsVectorType(CompilerType *element_type=nullptr, uint64_t *size=nullptr) const
bool IsMemberFunctionPointerType() const
CompilerType GetAtomicType() const
Return a new CompilerType that is the atomic type of this type.
CompilerType GetCanonicalType() const
void DumpTypeDescription(lldb::DescriptionLevel level=lldb::eDescriptionLevelFull) const
Dump to stdout.
bool IsRuntimeGeneratedType() const
lldb::TemplateArgumentKind GetTemplateArgumentKind(size_t idx, bool expand_pack=false) const
LazyBool ShouldPrintAsOneLiner(ValueObject *valobj) const
TypeMemberFunctionImpl GetMemberFunctionAtIndex(size_t idx)
bool IsPointerOrReferenceType(CompilerType *pointee_type=nullptr) const
bool IsPointerToScalarType() const
bool IsPointerType(CompilerType *pointee_type=nullptr) const
A uniqued constant string class.
Definition: ConstString.h:40
An data extractor class.
Definition: DataExtractor.h:48
"lldb/Target/ExecutionContextScope.h" Inherit from this if your object can reconstruct its execution ...
"lldb/Target/ExecutionContext.h" A class that contains an execution context.
A stream class that can stream formatted output to a file.
Definition: Stream.h:28
Interface for representing a type system.
Definition: TypeSystem.h:70
A class that represents a running process on the host machine.
Definition: SBAttachInfo.h:14
bool operator!=(const Address &lhs, const Address &rhs)
Definition: Address.cpp:1028
bool operator==(const Address &lhs, const Address &rhs)
Definition: Address.cpp:1022
std::shared_ptr< lldb_private::TypeSystem > TypeSystemSP
Definition: lldb-forward.h:457
void * opaque_compiler_type_t
Definition: lldb-types.h:87
DescriptionLevel
Description levels for "void GetDescription(Stream *, DescriptionLevel)" calls.
@ eDescriptionLevelFull
BasicType
Basic types enumeration for the public API SBType::GetBasicType().
Format
Display format definitions.
uint64_t offset_t
Definition: lldb-types.h:83
LanguageType
Programming language type.
Encoding
Register encoding definitions.
std::weak_ptr< lldb_private::TypeSystem > TypeSystemWP
Definition: lldb-forward.h:459