LLDB mainline
TypeSystem.h
Go to the documentation of this file.
1//===-- TypeSystem.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_TYPESYSTEM_H
10#define LLDB_SYMBOL_TYPESYSTEM_H
11
12#include <functional>
13#include <mutex>
14#include <optional>
15#include <string>
16
17#include "llvm/ADT/APFloat.h"
18#include "llvm/ADT/APSInt.h"
19#include "llvm/ADT/DenseMap.h"
20#include "llvm/ADT/SmallBitVector.h"
21#include "llvm/Support/Casting.h"
22#include "llvm/Support/Error.h"
23#include "llvm/Support/JSON.h"
24
29#include "lldb/lldb-private.h"
30
31class DWARFDIE;
32class DWARFASTParser;
33class PDBASTParser;
34
35namespace lldb_private {
36namespace npdb {
37 class PdbAstBuilder;
38} // namespace npdb
39
40/// A SmallBitVector that represents a set of source languages (\p
41/// lldb::LanguageType). Each lldb::LanguageType is represented by
42/// the bit with the position of its enumerator. The largest
43/// LanguageType is < 64, so this is space-efficient and on 64-bit
44/// architectures a LanguageSet can be completely stack-allocated.
46 llvm::SmallBitVector bitvector;
48
49 /// If the set contains a single language only, return it.
50 std::optional<lldb::LanguageType> GetSingularLanguage();
51 void Insert(lldb::LanguageType language);
52 bool Empty() const;
53 size_t Size() const;
54 bool operator[](unsigned i) const;
55};
56
57/// Interface for representing a type system.
58///
59/// Implemented by language plugins to define the type system for a given
60/// language.
61///
62/// This interface extensively used opaque pointers to prevent that generic
63/// LLDB code has dependencies on language plugins. The type and semantics of
64/// these opaque pointers are defined by the TypeSystem implementation inside
65/// the respective language plugin. Opaque pointers from one TypeSystem
66/// instance should never be passed to a different TypeSystem instance (even
67/// when the language plugin for both TypeSystem instances is the same).
68///
69/// Most of the functions in this class should not be called directly but only
70/// called by their respective counterparts in CompilerType, CompilerDecl and
71/// CompilerDeclContext.
72///
73/// \see lldb_private::CompilerType
74/// \see lldb_private::CompilerDecl
75/// \see lldb_private::CompilerDeclContext
77 public std::enable_shared_from_this<TypeSystem> {
78public:
79 // Constructors and Destructors
81 ~TypeSystem() override;
82
83 // LLVM RTTI support
84 virtual bool isA(const void *ClassID) const = 0;
85
87 Module *module);
88
90 Target *target);
91
92 /// Free up any resources associated with this TypeSystem. Done before
93 /// removing all the TypeSystems from the TypeSystemMap.
94 virtual void Finalize() {}
95
96 virtual DWARFASTParser *GetDWARFParser() { return nullptr; }
97 virtual PDBASTParser *GetPDBParser() { return nullptr; }
98 virtual npdb::PdbAstBuilder *GetNativePDBParser() { return nullptr; }
99
100 virtual SymbolFile *GetSymbolFile() const { return m_sym_file; }
101
102 virtual void SetSymbolFile(SymbolFile *sym_file) { m_sym_file = sym_file; }
103
104 // CompilerDecl functions
105 virtual ConstString DeclGetName(void *opaque_decl) = 0;
106
107 virtual ConstString DeclGetMangledName(void *opaque_decl);
108
109 virtual CompilerDeclContext DeclGetDeclContext(void *opaque_decl);
110
111 virtual CompilerType DeclGetFunctionReturnType(void *opaque_decl);
112
113 virtual size_t DeclGetFunctionNumArguments(void *opaque_decl);
114
115 virtual CompilerType DeclGetFunctionArgumentType(void *opaque_decl,
116 size_t arg_idx);
117
118 virtual CompilerType GetTypeForDecl(void *opaque_decl) = 0;
119
120 // CompilerDeclContext functions
121
122 virtual std::vector<CompilerDecl>
123 DeclContextFindDeclByName(void *opaque_decl_ctx, ConstString name,
124 const bool ignore_imported_decls);
125
126 virtual ConstString DeclContextGetName(void *opaque_decl_ctx) = 0;
127
128 virtual ConstString
129 DeclContextGetScopeQualifiedName(void *opaque_decl_ctx) = 0;
130
131 virtual bool DeclContextIsClassMethod(void *opaque_decl_ctx) = 0;
132
133 virtual bool DeclContextIsContainedInLookup(void *opaque_decl_ctx,
134 void *other_opaque_decl_ctx) = 0;
135
136 virtual lldb::LanguageType DeclContextGetLanguage(void *opaque_decl_ctx) = 0;
137
138 // Tests
139#ifndef NDEBUG
140 /// Verify the integrity of the type to catch CompilerTypes that mix
141 /// and match invalid TypeSystem/Opaque type pairs.
142 virtual bool Verify(lldb::opaque_compiler_type_t type) = 0;
143#endif
144
146 CompilerType *element_type, uint64_t *size,
147 bool *is_incomplete) = 0;
148
150
152
154
156
158
160 uint32_t &count, bool &is_complex) = 0;
161
163
164 virtual size_t
166
167 virtual CompilerType
169 const size_t index) = 0;
170
172
173 virtual bool
175
177 CompilerType *function_pointer_type_ptr) = 0;
178
180 bool &is_signed) = 0;
181
183 bool &is_signed) {
184 is_signed = false;
185 return false;
186 }
187
189
191 CompilerType *target_type, // Can pass NULL
192 bool check_cplusplus, bool check_objc) = 0;
193
195 CompilerType *pointee_type) = 0;
196
198
200
201 virtual bool CanPassInRegisters(const CompilerType &type) = 0;
202
203 // TypeSystems can support more than one language
204 virtual bool SupportsLanguage(lldb::LanguageType language) = 0;
205
206 // Type Completion
207
209
211 return false;
212 }
213
214 // AST related queries
215
216 virtual uint32_t GetPointerByteSize() = 0;
217
218 // Accessors
219
221 bool BaseOnly) = 0;
222
224
225 virtual uint32_t
227 CompilerType *pointee_or_element_compiler_type) = 0;
228
229 virtual lldb::LanguageType
231
232 virtual lldb::TypeClass GetTypeClass(lldb::opaque_compiler_type_t type) = 0;
233
234 // Creating related types
235
236 virtual CompilerType
238 ExecutionContextScope *exe_scope) = 0;
239
241 uint64_t size);
242
244
245 virtual CompilerType
247
248 // Returns -1 if this isn't a function of if the function doesn't have a
249 // prototype Returns a value >= 0 if there is a prototype.
251
252 virtual CompilerType
254 size_t idx) = 0;
255
256 virtual CompilerType
258
260
263
265
267
268 virtual CompilerType
270
271 virtual CompilerType
273
275
277
279
281
282 /// \param opaque_payload The m_payload field of Type, which may
283 /// carry TypeSystem-specific extra information.
285 const char *name,
286 const CompilerDeclContext &decl_ctx,
287 uint32_t opaque_payload);
288
289 // Exploring the type
290
291 virtual const llvm::fltSemantics &GetFloatTypeSemantics(size_t byte_size) = 0;
292
293 virtual std::optional<uint64_t>
295 ExecutionContextScope *exe_scope) = 0;
296
298 uint64_t &count) = 0;
299
301
303 bool omit_empty_base_classes,
304 const ExecutionContext *exe_ctx) = 0;
305
307
308 virtual lldb::BasicType
310
311 virtual void ForEachEnumerator(
313 std::function<bool(const CompilerType &integer_type,
314 ConstString name,
315 const llvm::APSInt &value)> const &callback) {}
316
317 virtual uint32_t GetNumFields(lldb::opaque_compiler_type_t type) = 0;
318
320 size_t idx, std::string &name,
321 uint64_t *bit_offset_ptr,
322 uint32_t *bitfield_bit_size_ptr,
323 bool *is_bitfield_ptr) = 0;
324
325 virtual uint32_t
327
328 virtual uint32_t
330
331 virtual CompilerType
333 uint32_t *bit_offset_ptr) = 0;
334
335 virtual CompilerType
337 uint32_t *bit_offset_ptr) = 0;
338
340 lldb::opaque_compiler_type_t type, ExecutionContext *exe_ctx, size_t idx,
341 bool transparent_pointers, bool omit_empty_base_classes,
342 bool ignore_array_bounds, std::string &child_name,
343 uint32_t &child_byte_size, int32_t &child_byte_offset,
344 uint32_t &child_bitfield_bit_size, uint32_t &child_bitfield_bit_offset,
345 bool &child_is_base_class, bool &child_is_deref_of_parent,
346 ValueObject *valobj, uint64_t &language_flags) = 0;
347
348 // Lookup a child given a name. This function will match base class names and
349 // member member names in "clang_type" only, not descendants.
351 llvm::StringRef name,
352 bool omit_empty_base_classes) = 0;
353
354 // Lookup a child member given a name. This function will match member names
355 // only and will descend into "clang_type" children in search for the first
356 // member in this class, or any base class that matches "name".
357 // TODO: Return all matches for a given name by returning a
358 // vector<vector<uint32_t>>
359 // so we catch all names that match a given child name, not just the first.
361 lldb::opaque_compiler_type_t type, llvm::StringRef name,
362 bool omit_empty_base_classes, std::vector<uint32_t> &child_indexes) = 0;
363
365
367 bool expand_pack);
368
371 bool expand_pack);
372 virtual CompilerType
374 bool expand_pack);
375 virtual std::optional<CompilerType::IntegralTemplateArgument>
377 bool expand_pack);
378
379 // Dumping types
380
381#ifndef NDEBUG
382 /// Convenience LLVM-style dump method for use in the debugger only.
383 LLVM_DUMP_METHOD virtual void
385#endif
386
388 ExecutionContext *exe_ctx, Stream &s,
389 lldb::Format format, const DataExtractor &data,
390 lldb::offset_t data_offset, size_t data_byte_size,
391 uint32_t bitfield_bit_size,
392 uint32_t bitfield_bit_offset, bool show_types,
393 bool show_summary, bool verbose, uint32_t depth) = 0;
394
396 lldb::Format format, const DataExtractor &data,
397 lldb::offset_t data_offset, size_t data_byte_size,
398 uint32_t bitfield_bit_size,
399 uint32_t bitfield_bit_offset,
400 ExecutionContextScope *exe_scope) = 0;
401
402 /// Dump the type to stdout.
406
407 /// Print a description of the type to a stream. The exact implementation
408 /// varies, but the expectation is that eDescriptionLevelFull returns a
409 /// source-like representation of the type, whereas eDescriptionLevelVerbose
410 /// does a dump of the underlying AST if applicable.
414
415 /// Dump a textual representation of the internal TypeSystem state to the
416 /// given stream.
417 ///
418 /// This should not modify the state of the TypeSystem if possible.
419 virtual void Dump(llvm::raw_ostream &output) = 0;
420
421 // TODO: These methods appear unused. Should they be removed?
422
424
426 ExecutionContext *exe_ctx, Stream &s,
427 const DataExtractor &data,
428 lldb::offset_t data_offset,
429 size_t data_byte_size) = 0;
430
431 // TODO: Determine if these methods should move to TypeSystemClang.
432
434 CompilerType *pointee_type) = 0;
435
437
439 uint32_t &length) = 0;
440
441 virtual std::optional<size_t>
443 ExecutionContextScope *exe_scope) = 0;
444
446
447 virtual CompilerType
449 size_t bit_size) = 0;
450
452
453 virtual bool IsConst(lldb::opaque_compiler_type_t type) = 0;
454
456 CompilerType *base_type_ptr) = 0;
457
459
461
462 // If the current object represents a typedef type, get the underlying type
464
466 CompilerType *element_type, uint64_t *size) = 0;
467
468 virtual CompilerType
470
471 virtual CompilerType
473
475 CompilerType *pointee_type, bool *is_rvalue) = 0;
476
477 virtual bool
479 return IsPointerOrReferenceType(type, nullptr);
480 }
481
482 virtual UserExpression *
483 GetUserExpression(llvm::StringRef expr, llvm::StringRef prefix,
484 lldb::LanguageType language,
485 Expression::ResultType desired_type,
486 const EvaluateExpressionOptions &options,
487 ValueObject *ctx_obj) {
488 return nullptr;
489 }
490
491 virtual FunctionCaller *GetFunctionCaller(const CompilerType &return_type,
492 const Address &function_address,
493 const ValueList &arg_value_list,
494 const char *name) {
495 return nullptr;
496 }
497
498 virtual std::unique_ptr<UtilityFunction>
499 CreateUtilityFunction(std::string text, std::string name);
500
502 return nullptr;
503 }
504
505 virtual CompilerType GetTypeForFormatters(void *type);
506
507 virtual LazyBool ShouldPrintAsOneLiner(void *type, ValueObject *valobj);
508
509 // Type systems can have types that are placeholder types, which are meant to
510 // indicate the presence of a type, but offer no actual information about
511 // said types, and leave the burden of actually figuring type information out
512 // to dynamic type resolution. For instance a language with a generics
513 // system, can use placeholder types to indicate "type argument goes here",
514 // without promising uniqueness of the placeholder, nor attaching any
515 // actually idenfiable information to said placeholder. This API allows type
516 // systems to tell LLDB when such a type has been encountered In response,
517 // the debugger can react by not using this type as a cache entry in any
518 // type-specific way For instance, LLDB will currently not cache any
519 // formatters that are discovered on such a type as attributable to the
520 // meaningless type itself, instead preferring to use the dynamic type
521 virtual bool IsMeaninglessWithoutDynamicResolution(void *type);
522
523 virtual std::optional<llvm::json::Value> ReportStatistics();
524
527 }
528protected:
530 /// Used for reporting statistics.
532};
533
535public:
538
539 // Clear calls Finalize on all the TypeSystems managed by this map, and then
540 // empties the map.
541 void Clear();
542
543 // Iterate through all of the type systems that are created. Return true from
544 // callback to keep iterating, false to stop iterating.
545 void ForEach(std::function<bool(lldb::TypeSystemSP)> const &callback);
546
547 llvm::Expected<lldb::TypeSystemSP>
549 bool can_create);
550
551 llvm::Expected<lldb::TypeSystemSP>
553 bool can_create);
554
555 /// Check all type systems in the map to see if any have forcefully completed
556 /// types;
558protected:
559 typedef llvm::DenseMap<uint16_t, lldb::TypeSystemSP> collection;
560 mutable std::mutex m_mutex; ///< A mutex to keep this object happy in
561 /// multi-threaded environments.
564
565private:
566 typedef llvm::function_ref<lldb::TypeSystemSP()> CreateCallback;
567 /// Finds the type system for the given language. If no type system could be
568 /// found for a language and a CreateCallback was provided, the value
569 /// returned by the callback will be treated as the TypeSystem for the
570 /// language.
571 ///
572 /// \param language The language for which the type system should be found.
573 /// \param create_callback A callback that will be called if no previously
574 /// created TypeSystem that fits the given language
575 /// could found. Can be omitted if a non-existent
576 /// type system should be treated as an error
577 /// instead.
578 /// \return The found type system or an error.
579 llvm::Expected<lldb::TypeSystemSP> GetTypeSystemForLanguage(
580 lldb::LanguageType language,
581 std::optional<CreateCallback> create_callback = std::nullopt);
582 };
583
584} // namespace lldb_private
585
586#endif // LLDB_SYMBOL_TYPESYSTEM_H
A section + offset based address class.
Definition: Address.h:59
Represents a generic declaration context in a program.
Generic representation of a type in a programming language.
Definition: CompilerType.h:36
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.
Encapsulates a function that can be called.
A class that describes an executable image and its associated object and symbol files.
Definition: Module.h:88
A stream class that can stream formatted output to a file.
Definition: Stream.h:28
Provides public interface for all SymbolFiles.
Definition: SymbolFile.h:49
llvm::DenseMap< uint16_t, lldb::TypeSystemSP > collection
Definition: TypeSystem.h:559
std::mutex m_mutex
A mutex to keep this object happy in multi-threaded environments.
Definition: TypeSystem.h:560
bool GetHasForcefullyCompletedTypes() const
Check all type systems in the map to see if any have forcefully completed types;.
llvm::function_ref< lldb::TypeSystemSP()> CreateCallback
Definition: TypeSystem.h:566
llvm::Expected< lldb::TypeSystemSP > GetTypeSystemForLanguage(lldb::LanguageType language, Module *module, bool can_create)
Definition: TypeSystem.cpp:302
void ForEach(std::function< bool(lldb::TypeSystemSP)> const &callback)
Definition: TypeSystem.cpp:218
Interface for representing a type system.
Definition: TypeSystem.h:77
virtual CompilerType GetFullyUnqualifiedType(lldb::opaque_compiler_type_t type)=0
virtual PersistentExpressionState * GetPersistentExpressionState()
Definition: TypeSystem.h:501
virtual CompilerType GetFunctionReturnType(lldb::opaque_compiler_type_t type)=0
virtual std::unique_ptr< UtilityFunction > CreateUtilityFunction(std::string text, std::string name)
Definition: TypeSystem.cpp:181
virtual void Finalize()
Free up any resources associated with this TypeSystem.
Definition: TypeSystem.h:94
virtual bool IsMeaninglessWithoutDynamicResolution(void *type)
Definition: TypeSystem.cpp:151
virtual size_t GetNumTemplateArguments(lldb::opaque_compiler_type_t type, bool expand_pack)
Definition: TypeSystem.cpp:125
virtual bool IsEnumerationType(lldb::opaque_compiler_type_t type, bool &is_signed)
Definition: TypeSystem.h:182
virtual PDBASTParser * GetPDBParser()
Definition: TypeSystem.h:97
virtual CompilerType GetBuiltinTypeByName(ConstString name)
Definition: TypeSystem.cpp:113
virtual bool GetCompleteType(lldb::opaque_compiler_type_t type)=0
virtual bool IsBeingDefined(lldb::opaque_compiler_type_t type)=0
virtual CompilerType GetTypeTemplateArgument(lldb::opaque_compiler_type_t type, size_t idx, bool expand_pack)
Definition: TypeSystem.cpp:136
virtual CompilerType GetChildCompilerTypeAtIndex(lldb::opaque_compiler_type_t type, 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)=0
virtual CompilerType GetTypeForFormatters(void *type)
Definition: TypeSystem.cpp:117
virtual bool IsVectorType(lldb::opaque_compiler_type_t type, CompilerType *element_type, uint64_t *size)=0
virtual CompilerType AddRestrictModifier(lldb::opaque_compiler_type_t type)
Definition: TypeSystem.cpp:102
virtual CompilerType GetAtomicType(lldb::opaque_compiler_type_t type)
Definition: TypeSystem.cpp:88
virtual lldb::Format GetFormat(lldb::opaque_compiler_type_t type)=0
virtual CompilerType GetLValueReferenceType(lldb::opaque_compiler_type_t type)
Definition: TypeSystem.cpp:79
virtual std::vector< CompilerDecl > DeclContextFindDeclByName(void *opaque_decl_ctx, ConstString name, const bool ignore_imported_decls)
Definition: TypeSystem.cpp:175
virtual void ForEachEnumerator(lldb::opaque_compiler_type_t type, std::function< bool(const CompilerType &integer_type, ConstString name, const llvm::APSInt &value)> const &callback)
Definition: TypeSystem.h:311
virtual uint32_t GetPointerByteSize()=0
virtual ConstString DeclGetName(void *opaque_decl)=0
virtual bool IsAggregateType(lldb::opaque_compiler_type_t type)=0
virtual bool IsDefined(lldb::opaque_compiler_type_t type)=0
virtual std::optional< size_t > GetTypeBitAlign(lldb::opaque_compiler_type_t type, ExecutionContextScope *exe_scope)=0
virtual ConstString GetTypeName(lldb::opaque_compiler_type_t type, bool BaseOnly)=0
virtual uint32_t GetIndexOfChildWithName(lldb::opaque_compiler_type_t type, llvm::StringRef name, bool omit_empty_base_classes)=0
virtual bool DeclContextIsClassMethod(void *opaque_decl_ctx)=0
virtual bool IsCStringType(lldb::opaque_compiler_type_t type, uint32_t &length)=0
virtual std::optional< llvm::json::Value > ReportStatistics()
Definition: TypeSystem.cpp:185
virtual CompilerType CreateTypedef(lldb::opaque_compiler_type_t type, const char *name, const CompilerDeclContext &decl_ctx, uint32_t opaque_payload)
Definition: TypeSystem.cpp:106
virtual void DumpTypeDescription(lldb::opaque_compiler_type_t type, Stream &s, lldb::DescriptionLevel level=lldb::eDescriptionLevelFull)=0
Print a description of the type to a stream.
virtual bool IsCompleteType(lldb::opaque_compiler_type_t type)=0
virtual bool IsFunctionType(lldb::opaque_compiler_type_t type)=0
virtual CompilerType GetFunctionArgumentAtIndex(lldb::opaque_compiler_type_t type, const size_t index)=0
virtual const llvm::fltSemantics & GetFloatTypeSemantics(size_t byte_size)=0
virtual CompilerType GetNonReferenceType(lldb::opaque_compiler_type_t type)=0
virtual FunctionCaller * GetFunctionCaller(const CompilerType &return_type, const Address &function_address, const ValueList &arg_value_list, const char *name)
Definition: TypeSystem.h:491
virtual std::optional< uint64_t > GetBitSize(lldb::opaque_compiler_type_t type, ExecutionContextScope *exe_scope)=0
virtual LazyBool ShouldPrintAsOneLiner(void *type, ValueObject *valobj)
Definition: TypeSystem.cpp:147
virtual size_t GetIndexOfChildMemberWithName(lldb::opaque_compiler_type_t type, llvm::StringRef name, bool omit_empty_base_classes, std::vector< uint32_t > &child_indexes)=0
virtual bool IsTypedefType(lldb::opaque_compiler_type_t type)=0
virtual bool IsBlockPointerType(lldb::opaque_compiler_type_t type, CompilerType *function_pointer_type_ptr)=0
virtual bool IsIntegerType(lldb::opaque_compiler_type_t type, bool &is_signed)=0
virtual lldb::LanguageType GetMinimumLanguage(lldb::opaque_compiler_type_t type)=0
virtual SymbolFile * GetSymbolFile() const
Definition: TypeSystem.h:100
virtual CompilerType AddConstModifier(lldb::opaque_compiler_type_t type)
Definition: TypeSystem.cpp:92
bool m_has_forcefully_completed_types
Used for reporting statistics.
Definition: TypeSystem.h:531
virtual npdb::PdbAstBuilder * GetNativePDBParser()
Definition: TypeSystem.h:98
SymbolFile * m_sym_file
Definition: TypeSystem.h:529
virtual CompilerType GetTypedefedType(lldb::opaque_compiler_type_t type)=0
virtual uint32_t GetTypeInfo(lldb::opaque_compiler_type_t type, CompilerType *pointee_or_element_compiler_type)=0
virtual bool IsPointerOrReferenceType(lldb::opaque_compiler_type_t type, CompilerType *pointee_type)=0
virtual uint32_t GetNumVirtualBaseClasses(lldb::opaque_compiler_type_t type)=0
virtual CompilerType DeclGetFunctionReturnType(void *opaque_decl)
Definition: TypeSystem.cpp:163
virtual lldb::Encoding GetEncoding(lldb::opaque_compiler_type_t type, uint64_t &count)=0
virtual uint32_t GetNumChildren(lldb::opaque_compiler_type_t type, bool omit_empty_base_classes, const ExecutionContext *exe_ctx)=0
virtual bool IsFloatingPointType(lldb::opaque_compiler_type_t type, uint32_t &count, bool &is_complex)=0
virtual lldb::TypeClass GetTypeClass(lldb::opaque_compiler_type_t type)=0
virtual bool DeclContextIsContainedInLookup(void *opaque_decl_ctx, void *other_opaque_decl_ctx)=0
virtual LLVM_DUMP_METHOD void dump(lldb::opaque_compiler_type_t type) const =0
Convenience LLVM-style dump method for use in the debugger only.
virtual bool IsFunctionPointerType(lldb::opaque_compiler_type_t type)=0
virtual bool IsCharType(lldb::opaque_compiler_type_t type)=0
virtual CompilerType GetTypeForDecl(void *opaque_decl)=0
virtual CompilerType DeclGetFunctionArgumentType(void *opaque_decl, size_t arg_idx)
Definition: TypeSystem.cpp:169
virtual void SetSymbolFile(SymbolFile *sym_file)
Definition: TypeSystem.h:102
virtual void DumpValue(lldb::opaque_compiler_type_t type, ExecutionContext *exe_ctx, 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, bool show_types, bool show_summary, bool verbose, uint32_t depth)=0
virtual bool IsMemberFunctionPointerType(lldb::opaque_compiler_type_t type)=0
virtual CompilerType GetRValueReferenceType(lldb::opaque_compiler_type_t type)
Definition: TypeSystem.cpp:84
virtual bool IsReferenceType(lldb::opaque_compiler_type_t type, CompilerType *pointee_type, bool *is_rvalue)=0
virtual lldb::LanguageType DeclContextGetLanguage(void *opaque_decl_ctx)=0
virtual bool IsScopedEnumerationType(lldb::opaque_compiler_type_t type)=0
bool GetHasForcefullyCompletedTypes() const
Definition: TypeSystem.h:525
virtual bool IsAnonymousType(lldb::opaque_compiler_type_t type)
Definition: TypeSystem.cpp:69
virtual bool IsPointerType(lldb::opaque_compiler_type_t type, CompilerType *pointee_type)=0
virtual ConstString DeclContextGetName(void *opaque_decl_ctx)=0
virtual ConstString DeclGetMangledName(void *opaque_decl)
Definition: TypeSystem.cpp:155
virtual bool IsVoidType(lldb::opaque_compiler_type_t type)=0
virtual CompilerType GetArrayType(lldb::opaque_compiler_type_t type, uint64_t size)
Definition: TypeSystem.cpp:73
virtual bool IsConst(lldb::opaque_compiler_type_t type)=0
virtual UserExpression * GetUserExpression(llvm::StringRef expr, llvm::StringRef prefix, lldb::LanguageType language, Expression::ResultType desired_type, const EvaluateExpressionOptions &options, ValueObject *ctx_obj)
Definition: TypeSystem.h:483
virtual void DumpTypeDescription(lldb::opaque_compiler_type_t type, lldb::DescriptionLevel level=lldb::eDescriptionLevelFull)=0
Dump the type to stdout.
virtual void DumpSummary(lldb::opaque_compiler_type_t type, ExecutionContext *exe_ctx, Stream &s, const DataExtractor &data, lldb::offset_t data_offset, size_t data_byte_size)=0
virtual ConstString DeclContextGetScopeQualifiedName(void *opaque_decl_ctx)=0
virtual CompilerType GetFieldAtIndex(lldb::opaque_compiler_type_t type, size_t idx, std::string &name, uint64_t *bit_offset_ptr, uint32_t *bitfield_bit_size_ptr, bool *is_bitfield_ptr)=0
virtual CompilerType GetDirectBaseClassAtIndex(lldb::opaque_compiler_type_t type, size_t idx, uint32_t *bit_offset_ptr)=0
virtual void Dump(llvm::raw_ostream &output)=0
Dump a textual representation of the internal TypeSystem state to the given stream.
virtual bool CanPassInRegisters(const CompilerType &type)=0
virtual CompilerType GetPointeeType(lldb::opaque_compiler_type_t type)=0
virtual CompilerType GetVirtualBaseClassAtIndex(lldb::opaque_compiler_type_t type, size_t idx, uint32_t *bit_offset_ptr)=0
virtual size_t GetNumberOfFunctionArguments(lldb::opaque_compiler_type_t type)=0
virtual bool SupportsLanguage(lldb::LanguageType language)=0
virtual CompilerType GetArrayElementType(lldb::opaque_compiler_type_t type, ExecutionContextScope *exe_scope)=0
virtual bool IsPolymorphicClass(lldb::opaque_compiler_type_t type)=0
virtual uint32_t IsHomogeneousAggregate(lldb::opaque_compiler_type_t type, CompilerType *base_type_ptr)=0
virtual std::optional< CompilerType::IntegralTemplateArgument > GetIntegralTemplateArgument(lldb::opaque_compiler_type_t type, size_t idx, bool expand_pack)
Definition: TypeSystem.cpp:142
virtual DWARFASTParser * GetDWARFParser()
Definition: TypeSystem.h:96
virtual bool Verify(lldb::opaque_compiler_type_t type)=0
Verify the integrity of the type to catch CompilerTypes that mix and match invalid TypeSystem/Opaque ...
Definition: TypeSystem.cpp:66
virtual unsigned GetTypeQualifiers(lldb::opaque_compiler_type_t type)=0
virtual lldb::BasicType GetBasicTypeEnumeration(lldb::opaque_compiler_type_t type)=0
virtual CompilerType GetCanonicalType(lldb::opaque_compiler_type_t type)=0
virtual ConstString GetDisplayTypeName(lldb::opaque_compiler_type_t type)=0
virtual int GetFunctionArgumentCount(lldb::opaque_compiler_type_t type)=0
virtual lldb::TemplateArgumentKind GetTemplateArgumentKind(lldb::opaque_compiler_type_t type, size_t idx, bool expand_pack)
Definition: TypeSystem.cpp:131
virtual bool IsRuntimeGeneratedType(lldb::opaque_compiler_type_t type)=0
virtual CompilerType GetBuiltinTypeForEncodingAndBitSize(lldb::Encoding encoding, size_t bit_size)=0
virtual bool ShouldTreatScalarValueAsAddress(lldb::opaque_compiler_type_t type)
Definition: TypeSystem.h:478
virtual bool DumpTypeValue(lldb::opaque_compiler_type_t type, 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)=0
static lldb::TypeSystemSP CreateInstance(lldb::LanguageType language, Module *module)
Definition: TypeSystem.cpp:55
virtual uint32_t GetNumFields(lldb::opaque_compiler_type_t type)=0
virtual bool IsTemplateType(lldb::opaque_compiler_type_t type)
Definition: TypeSystem.cpp:121
virtual bool isA(const void *ClassID) const =0
virtual size_t DeclGetFunctionNumArguments(void *opaque_decl)
Definition: TypeSystem.cpp:167
virtual bool IsForcefullyCompleted(lldb::opaque_compiler_type_t type)
Definition: TypeSystem.h:210
virtual CompilerType GetPointerType(lldb::opaque_compiler_type_t type)=0
virtual bool IsPossibleDynamicType(lldb::opaque_compiler_type_t type, CompilerType *target_type, bool check_cplusplus, bool check_objc)=0
virtual CompilerDeclContext DeclGetDeclContext(void *opaque_decl)
Definition: TypeSystem.cpp:159
virtual size_t GetNumMemberFunctions(lldb::opaque_compiler_type_t type)=0
virtual CompilerType GetBasicTypeFromAST(lldb::BasicType basic_type)=0
virtual uint32_t GetNumDirectBaseClasses(lldb::opaque_compiler_type_t type)=0
virtual CompilerType AddVolatileModifier(lldb::opaque_compiler_type_t type)
Definition: TypeSystem.cpp:97
virtual bool IsScalarType(lldb::opaque_compiler_type_t type)=0
virtual CompilerType GetEnumerationIntegerType(lldb::opaque_compiler_type_t type)=0
virtual bool IsArrayType(lldb::opaque_compiler_type_t type, CompilerType *element_type, uint64_t *size, bool *is_incomplete)=0
virtual TypeMemberFunctionImpl GetMemberFunctionAtIndex(lldb::opaque_compiler_type_t type, size_t idx)=0
virtual CompilerType GetFunctionArgumentTypeAtIndex(lldb::opaque_compiler_type_t type, size_t idx)=0
Encapsulates a one-time expression for use in lldb.
A class that represents a running process on the host machine.
Definition: SBAttachInfo.h:14
std::shared_ptr< lldb_private::TypeSystem > TypeSystemSP
Definition: lldb-forward.h:444
void * opaque_compiler_type_t
Definition: lldb-types.h:86
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.
A SmallBitVector that represents a set of source languages (lldb::LanguageType).
Definition: TypeSystem.h:45
llvm::SmallBitVector bitvector
Definition: TypeSystem.h:46
std::optional< lldb::LanguageType > GetSingularLanguage()
If the set contains a single language only, return it.
Definition: TypeSystem.cpp:28
bool operator[](unsigned i) const
Definition: TypeSystem.cpp:37
void Insert(lldb::LanguageType language)
Definition: TypeSystem.cpp:34