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 unsigned GetPtrAuthKey() const;
266
267 unsigned GetPtrAuthDiscriminator() const;
268
269 bool GetPtrAuthAddressDiversity() const;
270
271 /// Accessors.
272 /// \{
273
274 /// Returns a shared pointer to the type system. The
275 /// TypeSystem::TypeSystemSPWrapper can be compared for equality.
277
278 ConstString GetTypeName(bool BaseOnly = false) const;
279
281
282 uint32_t
283 GetTypeInfo(CompilerType *pointee_or_element_compiler_type = nullptr) const;
284
286
288
289 lldb::TypeClass GetTypeClass() const;
290
291 void SetCompilerType(lldb::TypeSystemWP type_system,
293 void SetCompilerType(TypeSystemSPWrapper type_system,
295
296 unsigned GetTypeQualifiers() const;
297 /// \}
298
299 /// Creating related types.
300 /// \{
302
303 CompilerType GetArrayType(uint64_t size) const;
304
306
308
310
311 /// Returns -1 if this isn't a function of if the function doesn't
312 /// have a prototype Returns a value >= 0 if there is a prototype.
313 int GetFunctionArgumentCount() const;
314
316
318
319 size_t GetNumMemberFunctions() const;
320
322
323 /// If this type is a reference to a type (L value or R value reference),
324 /// return a new type with the reference removed, else return the current type
325 /// itself.
327
328 /// If this type is a pointer type, return the type that the pointer points
329 /// to, else return an invalid type.
331
332 /// Return a new CompilerType that is a pointer to this type
334
335 /// Return a new CompilerType that is a L value reference to this type if this
336 /// type is valid and the type system supports L value references, else return
337 /// an invalid type.
339
340 /// Return a new CompilerType that is a R value reference to this type if this
341 /// type is valid and the type system supports R value references, else return
342 /// an invalid type.
344
345 /// Return a new CompilerType adds a const modifier to this type if this type
346 /// is valid and the type system supports const modifiers, else return an
347 /// invalid type.
349
350 /// Return a new CompilerType adds a volatile modifier to this type if this
351 /// type is valid and the type system supports volatile modifiers, else return
352 /// an invalid type.
354
355 /// Return a new CompilerType that is the atomic type of this type. If this
356 /// type is not valid or the type system doesn't support atomic types, this
357 /// returns an invalid type.
359
360 /// Return a new CompilerType adds a restrict modifier to this type if this
361 /// type is valid and the type system supports restrict modifiers, else return
362 /// an invalid type.
364
365 /// Create a typedef to this type using "name" as the name of the typedef this
366 /// type is valid and the type system supports typedefs, else return an
367 /// invalid type.
368 /// \param payload The typesystem-specific \p lldb::Type payload.
369 CompilerType CreateTypedef(const char *name,
370 const CompilerDeclContext &decl_ctx,
371 uint32_t payload) const;
372
373 /// If the current object represents a typedef type, get the underlying type
375
376 /// Create related types using the current type's AST
378
379 /// Return a new CompilerType adds a ptrauth modifier from the given 32-bit
380 /// opaque payload to this type if this type is valid and the type system
381 /// supports ptrauth modifiers, else return an invalid type. Note that this
382 /// does not check if this type is a pointer.
383 CompilerType AddPtrAuthModifier(uint32_t payload) const;
384 /// \}
385
386 /// Exploring the type.
387 /// \{
388 struct IntegralTemplateArgument;
389
390 /// Return the size of the type in bytes.
391 std::optional<uint64_t> GetByteSize(ExecutionContextScope *exe_scope) const;
392 /// Return the size of the type in bits.
393 std::optional<uint64_t> GetBitSize(ExecutionContextScope *exe_scope) const;
394
395 lldb::Encoding GetEncoding(uint64_t &count) const;
396
397 lldb::Format GetFormat() const;
398
399 std::optional<size_t> GetTypeBitAlign(ExecutionContextScope *exe_scope) const;
400
401 llvm::Expected<uint32_t>
402 GetNumChildren(bool omit_empty_base_classes,
403 const ExecutionContext *exe_ctx) const;
404
406
407 /// If this type is an enumeration, iterate through all of its enumerators
408 /// using a callback. If the callback returns true, keep iterating, else abort
409 /// the iteration.
411 std::function<bool(const CompilerType &integer_type, ConstString name,
412 const llvm::APSInt &value)> const &callback) const;
413
414 uint32_t GetNumFields() const;
415
416 CompilerType GetFieldAtIndex(size_t idx, std::string &name,
417 uint64_t *bit_offset_ptr,
418 uint32_t *bitfield_bit_size_ptr,
419 bool *is_bitfield_ptr) const;
420
421 uint32_t GetNumDirectBaseClasses() const;
422
423 uint32_t GetNumVirtualBaseClasses() const;
424
426 uint32_t *bit_offset_ptr) const;
427
429 uint32_t *bit_offset_ptr) const;
430
431 CompilerDecl GetStaticFieldWithName(llvm::StringRef name) const;
432
433 uint32_t GetIndexOfFieldWithName(const char *name,
434 CompilerType *field_compiler_type = nullptr,
435 uint64_t *bit_offset_ptr = nullptr,
436 uint32_t *bitfield_bit_size_ptr = nullptr,
437 bool *is_bitfield_ptr = nullptr) const;
438
439 llvm::Expected<CompilerType> GetChildCompilerTypeAtIndex(
440 ExecutionContext *exe_ctx, size_t idx, bool transparent_pointers,
441 bool omit_empty_base_classes, bool ignore_array_bounds,
442 std::string &child_name, uint32_t &child_byte_size,
443 int32_t &child_byte_offset, uint32_t &child_bitfield_bit_size,
444 uint32_t &child_bitfield_bit_offset, bool &child_is_base_class,
445 bool &child_is_deref_of_parent, ValueObject *valobj,
446 uint64_t &language_flags) const;
447
448 /// Lookup a child given a name. This function will match base class names and
449 /// member member names in "clang_type" only, not descendants.
450 uint32_t GetIndexOfChildWithName(llvm::StringRef name,
451 bool omit_empty_base_classes) const;
452
453 /// Lookup a child member given a name. This function will match member names
454 /// only and will descend into "clang_type" children in search for the first
455 /// member in this class, or any base class that matches "name".
456 /// TODO: Return all matches for a given name by returning a
457 /// vector<vector<uint32_t>>
458 /// so we catch all names that match a given child name, not just the first.
459 size_t
460 GetIndexOfChildMemberWithName(llvm::StringRef name,
461 bool omit_empty_base_classes,
462 std::vector<uint32_t> &child_indexes) const;
463
464 CompilerType GetDirectNestedTypeWithName(llvm::StringRef name) const;
465
466 /// Return the number of template arguments the type has.
467 /// If expand_pack is true, then variadic argument packs are automatically
468 /// expanded to their supplied arguments. If it is false an argument pack
469 /// will only count as 1 argument.
470 size_t GetNumTemplateArguments(bool expand_pack = false) const;
471
472 // Return the TemplateArgumentKind of the template argument at index idx.
473 // If expand_pack is true, then variadic argument packs are automatically
474 // expanded to their supplied arguments. With expand_pack set to false, an
475 // arguement pack will count as 1 argument and return a type of Pack.
477 GetTemplateArgumentKind(size_t idx, bool expand_pack = false) const;
479 bool expand_pack = false) const;
480
481 /// Returns the value of the template argument and its type.
482 /// If expand_pack is true, then variadic argument packs are automatically
483 /// expanded to their supplied arguments. With expand_pack set to false, an
484 /// arguement pack will count as 1 argument and it is invalid to call this
485 /// method on the pack argument.
486 std::optional<IntegralTemplateArgument>
487 GetIntegralTemplateArgument(size_t idx, bool expand_pack = false) const;
488
490
492
494 /// \}
495
496 /// Dumping types.
497 /// \{
498#ifndef NDEBUG
499 /// Convenience LLVM-style dump method for use in the debugger only.
500 /// Don't call this function from actual code.
501 LLVM_DUMP_METHOD void dump() const;
502#endif
503
504 bool DumpTypeValue(Stream *s, lldb::Format format, const DataExtractor &data,
505 lldb::offset_t data_offset, size_t data_byte_size,
506 uint32_t bitfield_bit_size, uint32_t bitfield_bit_offset,
507 ExecutionContextScope *exe_scope);
508
509 /// Dump to stdout.
512
513 /// Print a description of the type to a stream. The exact implementation
514 /// varies, but the expectation is that eDescriptionLevelFull returns a
515 /// source-like representation of the type, whereas eDescriptionLevelVerbose
516 /// does a dump of the underlying AST if applicable.
519 /// \}
520
521 bool GetValueAsScalar(const DataExtractor &data, lldb::offset_t data_offset,
522 size_t data_byte_size, Scalar &value,
523 ExecutionContextScope *exe_scope) const;
524 void Clear() {
525 m_type_system = {};
526 m_type = nullptr;
527 }
528
529private:
530#ifndef NDEBUG
531 /// If the type is valid, ask the TypeSystem to verify the integrity
532 /// of the type to catch CompilerTypes that mix and match invalid
533 /// TypeSystem/Opaque type pairs.
534 bool Verify() const;
535#endif
536
539};
540
541bool operator==(const CompilerType &lhs, const CompilerType &rhs);
542bool operator!=(const CompilerType &lhs, const CompilerType &rhs);
543
545 llvm::APSInt value;
547};
548
549} // namespace lldb_private
550
551#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 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:287
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:537
CompilerType GetDirectNestedTypeWithName(llvm::StringRef name) const
bool GetPtrAuthAddressDiversity() 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
llvm::Expected< 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 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 ...
unsigned GetPtrAuthDiscriminator() const
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:538
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.
unsigned GetPtrAuthKey() const
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
CompilerType AddPtrAuthModifier(uint32_t payload) const
Return a new CompilerType adds a ptrauth modifier from the given 32-bit opaque payload to this type i...
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.
bool operator!=(const Address &lhs, const Address &rhs)
Definition: Address.cpp:1029
bool operator==(const Address &lhs, const Address &rhs)
Definition: Address.cpp:1023
std::shared_ptr< lldb_private::TypeSystem > TypeSystemSP
Definition: lldb-forward.h:463
void * opaque_compiler_type_t
Definition: lldb-types.h:89
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:85
LanguageType
Programming language type.
Encoding
Register encoding definitions.
std::weak_ptr< lldb_private::TypeSystem > TypeSystemWP
Definition: lldb-forward.h:465