LLDB mainline
TypeSystemClike.h
Go to the documentation of this file.
1//===-- TypeSystemClike.h -------------------------------------------------===//
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_SOURCE_PLUGINS_TYPESYSTEM_CLIKE_TYPESYSTEMCLIKE_H
10#define LLDB_SOURCE_PLUGINS_TYPESYSTEM_CLIKE_TYPESYSTEMCLIKE_H
11
14
15namespace lldb_private {
16
17/// A TypeSystem for C-like languages such as C, C++ and Objective-C.
19 // LLVM RTTI support
20 static char ID;
21
22public:
24 ~TypeSystemClike() override;
25
26 // PluginInterface
27 static void Initialize();
28 static void Terminate();
29 static llvm::StringRef GetPluginNameStatic() { return "cpp"; }
30 llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); }
31
33 Module *module, Target *target);
36
37 // LLVM RTTI support
38 bool isA(const void *ClassID) const override { return ClassID == &ID; }
39 static bool classof(const TypeSystem *ts) { return ts->isA(&ID); }
40
41 ConstString DeclGetName(void *opaque_decl) override;
42 CompilerType GetTypeForDecl(void *opaque_decl) override;
43 ConstString DeclContextGetName(void *opaque_decl_ctx) override;
44 ConstString DeclContextGetScopeQualifiedName(void *opaque_decl_ctx) override;
45 bool DeclContextIsClassMethod(void *opaque_decl_ctx) override;
46 bool DeclContextIsContainedInLookup(void *opaque_decl_ctx,
47 void *other_opaque_decl_ctx) override;
48 lldb::LanguageType DeclContextGetLanguage(void *opaque_decl_ctx) override;
49 bool Verify(lldb::opaque_compiler_type_t type) override;
51 CompilerType *element_type, uint64_t *size,
52 bool *is_incomplete) override;
54 bool IsCharType(lldb::opaque_compiler_type_t type) override;
56 bool IsDefined(lldb::opaque_compiler_type_t type) override;
59 size_t
62 const size_t index) override;
67 CompilerType *function_pointer_type_ptr) override;
69 bool &is_signed) override;
72 CompilerType *target_type, bool check_cplusplus,
73 bool check_objc) override;
75 CompilerType *pointee_type) override;
77 bool IsVoidType(lldb::opaque_compiler_type_t type) override;
78 bool CanPassInRegisters(const CompilerType &type) override;
79 bool SupportsLanguage(lldb::LanguageType language) override;
81 uint32_t GetPointerByteSize() override;
82 CompilerType GetPointerDiffType(bool is_signed) override;
83 CompilerType GetSizeType() override;
84 unsigned GetPtrAuthKey(lldb::opaque_compiler_type_t type) override;
88 bool BaseOnly) override;
91 CompilerType *pointee_or_element_compiler_type) override;
94 lldb::TypeClass GetTypeClass(lldb::opaque_compiler_type_t type) override;
96 ExecutionContextScope *exe_scope) override;
102 size_t idx) override;
108 size_t idx) override;
111 const llvm::fltSemantics &GetFloatTypeSemantics(size_t byte_size,
112 lldb::Format format) override;
113 llvm::Expected<uint64_t>
115 ExecutionContextScope *exe_scope) override;
118 llvm::Expected<uint32_t>
120 bool omit_empty_base_classes,
121 const ExecutionContext *exe_ctx) override;
124 uint32_t GetNumFields(lldb::opaque_compiler_type_t type) override;
126 std::string &name, uint64_t *bit_offset_ptr,
127 uint32_t *bitfield_bit_size_ptr,
128 bool *is_bitfield_ptr) override;
132 size_t idx,
133 uint32_t *bit_offset_ptr) override;
135 size_t idx,
136 uint32_t *bit_offset_ptr) override;
137 llvm::Expected<CompilerType>
139 ExecutionContext *exe_ctx, std::string &deref_name,
140 uint32_t &deref_byte_size, int32_t &deref_byte_offset,
141 ValueObject *valobj, uint64_t &language_flags) override;
142 llvm::Expected<CompilerType> GetChildCompilerTypeAtIndex(
143 lldb::opaque_compiler_type_t type, ExecutionContext *exe_ctx, size_t idx,
144 bool transparent_pointers, bool omit_empty_base_classes,
145 bool ignore_array_bounds, std::string &child_name,
146 uint32_t &child_byte_size, int32_t &child_byte_offset,
147 uint32_t &child_bitfield_bit_size, uint32_t &child_bitfield_bit_offset,
148 bool &child_is_base_class, bool &child_is_deref_of_parent,
149 ValueObject *valobj, uint64_t &language_flags) override;
150 llvm::Expected<uint32_t>
152 llvm::StringRef name,
153 bool omit_empty_base_classes) override;
154 size_t
156 llvm::StringRef name,
157 bool omit_empty_base_classes,
158 std::vector<uint32_t> &child_indexes) override;
160 lldb::Format format, const DataExtractor &data,
161 lldb::offset_t data_offset, size_t data_byte_size,
162 uint32_t bitfield_bit_size, uint32_t bitfield_bit_offset,
163 ExecutionContextScope *exe_scope) override;
170 void Dump(llvm::raw_ostream &output, llvm::StringRef filter,
171 bool show_color) override;
174 CompilerType *pointee_type) override;
175 unsigned GetTypeQualifiers(lldb::opaque_compiler_type_t type) override;
176 std::optional<size_t>
178 ExecutionContextScope *exe_scope) override;
181 size_t bit_size) override;
183 bool IsConst(lldb::opaque_compiler_type_t type) override;
185 CompilerType *base_type_ptr) override;
190 CompilerType *element_type, uint64_t *size) override;
195 CompilerType *pointee_type, bool *is_rvalue) override;
196};
197
198} // namespace lldb_private
199
200#endif // LLDB_SOURCE_PLUGINS_TYPESYSTEM_CLIKE_TYPESYSTEMCLIKE_H
Generic representation of a type in a programming language.
A uniqued constant string class.
Definition ConstString.h:40
An data extractor class.
"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 class that describes an executable image and its associated object and symbol files.
Definition Module.h:91
A stream class that can stream formatted output to a file.
Definition Stream.h:28
size_t GetNumberOfFunctionArguments(lldb::opaque_compiler_type_t type) override
bool IsArrayType(lldb::opaque_compiler_type_t type, CompilerType *element_type, uint64_t *size, bool *is_incomplete) override
bool isA(const void *ClassID) const override
ConstString DeclContextGetName(void *opaque_decl_ctx) override
bool IsPossibleDynamicType(lldb::opaque_compiler_type_t type, CompilerType *target_type, bool check_cplusplus, bool check_objc) override
size_t GetNumMemberFunctions(lldb::opaque_compiler_type_t type) override
CompilerType GetArrayElementType(lldb::opaque_compiler_type_t type, ExecutionContextScope *exe_scope) override
unsigned GetPtrAuthDiscriminator(lldb::opaque_compiler_type_t type) override
lldb::Encoding GetEncoding(lldb::opaque_compiler_type_t type) override
uint32_t GetNumFields(lldb::opaque_compiler_type_t type) override
bool GetPtrAuthAddressDiversity(lldb::opaque_compiler_type_t type) override
unsigned GetTypeQualifiers(lldb::opaque_compiler_type_t type) override
static llvm::StringRef GetPluginNameStatic()
bool IsVoidType(lldb::opaque_compiler_type_t type) override
lldb::TypeClass GetTypeClass(lldb::opaque_compiler_type_t type) override
bool IsVectorType(lldb::opaque_compiler_type_t type, CompilerType *element_type, uint64_t *size) override
bool Verify(lldb::opaque_compiler_type_t type) override
Verify the integrity of the type to catch CompilerTypes that mix and match invalid TypeSystem/Opaque ...
bool IsScopedEnumerationType(lldb::opaque_compiler_type_t type) override
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) override
bool DeclContextIsClassMethod(void *opaque_decl_ctx) override
llvm::Expected< uint64_t > GetBitSize(lldb::opaque_compiler_type_t type, ExecutionContextScope *exe_scope) override
bool IsCompleteType(lldb::opaque_compiler_type_t type) override
CompilerType GetBuiltinTypeForEncodingAndBitSize(lldb::Encoding encoding, size_t bit_size) override
lldb::LanguageType GetMinimumLanguage(lldb::opaque_compiler_type_t type) override
uint32_t GetNumDirectBaseClasses(lldb::opaque_compiler_type_t type) override
static LanguageSet GetSupportedLanguagesForTypes()
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) override
size_t GetIndexOfChildMemberWithName(lldb::opaque_compiler_type_t type, llvm::StringRef name, bool omit_empty_base_classes, std::vector< uint32_t > &child_indexes) override
int GetFunctionArgumentCount(lldb::opaque_compiler_type_t type) override
CompilerType GetDirectBaseClassAtIndex(lldb::opaque_compiler_type_t type, size_t idx, uint32_t *bit_offset_ptr) override
bool IsTypedefType(lldb::opaque_compiler_type_t type) override
bool IsMemberDataPointerType(lldb::opaque_compiler_type_t type) override
bool IsIntegerType(lldb::opaque_compiler_type_t type, bool &is_signed) override
CompilerType GetEnumerationIntegerType(lldb::opaque_compiler_type_t type) override
static bool classof(const TypeSystem *ts)
TypeMemberFunctionImpl GetMemberFunctionAtIndex(lldb::opaque_compiler_type_t type, size_t idx) override
bool IsAggregateType(lldb::opaque_compiler_type_t type) override
CompilerType GetFullyUnqualifiedType(lldb::opaque_compiler_type_t type) override
bool IsFunctionType(lldb::opaque_compiler_type_t type) override
llvm::Expected< CompilerType > GetDereferencedType(lldb::opaque_compiler_type_t type, ExecutionContext *exe_ctx, std::string &deref_name, uint32_t &deref_byte_size, int32_t &deref_byte_offset, ValueObject *valobj, uint64_t &language_flags) override
ConstString DeclContextGetScopeQualifiedName(void *opaque_decl_ctx) override
bool IsConst(lldb::opaque_compiler_type_t type) override
CompilerType GetPointerType(lldb::opaque_compiler_type_t type) override
bool IsPointerType(lldb::opaque_compiler_type_t type, CompilerType *pointee_type) override
llvm::Expected< uint32_t > GetNumChildren(lldb::opaque_compiler_type_t type, bool omit_empty_base_classes, const ExecutionContext *exe_ctx) override
bool IsScalarType(lldb::opaque_compiler_type_t type) override
lldb::Format GetFormat(lldb::opaque_compiler_type_t type) override
bool CanPassInRegisters(const CompilerType &type) override
llvm::Expected< 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) override
bool IsReferenceType(lldb::opaque_compiler_type_t type, CompilerType *pointee_type, bool *is_rvalue) override
uint32_t IsHomogeneousAggregate(lldb::opaque_compiler_type_t type, CompilerType *base_type_ptr) override
CompilerType GetBasicTypeFromAST(lldb::BasicType basic_type) override
std::optional< size_t > GetTypeBitAlign(lldb::opaque_compiler_type_t type, ExecutionContextScope *exe_scope) override
CompilerType GetPointeeType(lldb::opaque_compiler_type_t type) override
llvm::StringRef GetPluginName() override
bool IsRuntimeGeneratedType(lldb::opaque_compiler_type_t type) override
This is used by swift.
bool IsFunctionPointerType(lldb::opaque_compiler_type_t type) override
CompilerType GetTypeForDecl(void *opaque_decl) override
CompilerType GetTypedefedType(lldb::opaque_compiler_type_t type) override
CompilerType GetCanonicalType(lldb::opaque_compiler_type_t type) override
CompilerType GetFunctionReturnType(lldb::opaque_compiler_type_t type) override
ConstString DeclGetName(void *opaque_decl) override
bool IsMemberFunctionPointerType(lldb::opaque_compiler_type_t type) override
unsigned GetPtrAuthKey(lldb::opaque_compiler_type_t type) override
void DumpTypeDescription(lldb::opaque_compiler_type_t type, lldb::DescriptionLevel level=lldb::eDescriptionLevelFull) override
Dump the type to stdout.
bool IsCharType(lldb::opaque_compiler_type_t type) override
uint32_t GetNumVirtualBaseClasses(lldb::opaque_compiler_type_t type) override
bool IsDefined(lldb::opaque_compiler_type_t type) override
bool IsBeingDefined(lldb::opaque_compiler_type_t type) override
void Dump(llvm::raw_ostream &output, llvm::StringRef filter, bool show_color) override
Dump a textual representation of the internal TypeSystem state to the given stream.
lldb::BasicType GetBasicTypeEnumeration(lldb::opaque_compiler_type_t type) override
bool GetCompleteType(lldb::opaque_compiler_type_t type) override
CompilerType GetSizeType() override
bool IsPointerOrReferenceType(lldb::opaque_compiler_type_t type, CompilerType *pointee_type) override
bool IsBlockPointerType(lldb::opaque_compiler_type_t type, CompilerType *function_pointer_type_ptr) override
bool IsFloatingPointType(lldb::opaque_compiler_type_t type) override
CompilerType GetNonReferenceType(lldb::opaque_compiler_type_t type) override
CompilerType GetFunctionArgumentAtIndex(lldb::opaque_compiler_type_t type, const size_t index) override
bool DeclContextIsContainedInLookup(void *opaque_decl_ctx, void *other_opaque_decl_ctx) override
static lldb::TypeSystemSP CreateInstance(lldb::LanguageType language, Module *module, Target *target)
uint32_t GetPointerByteSize() override
static LanguageSet GetSupportedLanguagesForExpressions()
bool IsPolymorphicClass(lldb::opaque_compiler_type_t type) override
bool SupportsLanguage(lldb::LanguageType language) override
CompilerType GetFunctionArgumentTypeAtIndex(lldb::opaque_compiler_type_t type, size_t idx) override
const llvm::fltSemantics & GetFloatTypeSemantics(size_t byte_size, lldb::Format format) override
CompilerType GetVirtualBaseClassAtIndex(lldb::opaque_compiler_type_t type, size_t idx, uint32_t *bit_offset_ptr) override
ConstString GetTypeName(lldb::opaque_compiler_type_t type, bool BaseOnly) override
ConstString GetDisplayTypeName(lldb::opaque_compiler_type_t type) override
CompilerType GetPointerDiffType(bool is_signed) override
uint32_t GetTypeInfo(lldb::opaque_compiler_type_t type, CompilerType *pointee_or_element_compiler_type) override
llvm::Expected< uint32_t > GetIndexOfChildWithName(lldb::opaque_compiler_type_t type, llvm::StringRef name, bool omit_empty_base_classes) override
lldb::LanguageType DeclContextGetLanguage(void *opaque_decl_ctx) override
virtual bool isA(const void *ClassID) const =0
A class that represents a running process on the host machine.
std::shared_ptr< lldb_private::TypeSystem > TypeSystemSP
void * opaque_compiler_type_t
Definition lldb-types.h:91
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:86
LanguageType
Programming language type.
Encoding
Register encoding definitions.
A SmallBitVector that represents a set of source languages (lldb::LanguageType).
Definition Type.h:38