https://github.com/Teemperor created https://github.com/llvm/llvm-project/pull/222611
Introduces an empty TypeSystem plugin infrastructure for the new TypeSystemClike. For the RFC with more information and background, see https://discourse.llvm.org/t/rfc-a-faster-more-reliable-type-system-for-c-languages/91459 assisted-by: claude >From 7a6e2bfa5920762ab93f58abb6cb0f4783d15151 Mon Sep 17 00:00:00 2001 From: Raphael Isemann <[email protected]> Date: Thu, 10 Sep 2026 09:34:47 +0100 Subject: [PATCH] [lldb][TypeSystemClike][NFC] Add the TypeSystemClike plugin skeleton Introduces an empty TypeSystem plugin infrastructure for the new TypeSystemClike. For the RFC with more information and background, see https://discourse.llvm.org/t/rfc-a-faster-more-reliable-type-system-for-c-languages/91459 assisted-by: claude --- lldb/source/Plugins/TypeSystem/CMakeLists.txt | 1 + .../Plugins/TypeSystem/Clike/CMakeLists.txt | 10 + .../TypeSystem/Clike/TypeSystemClike.cpp | 479 ++++++++++++++++++ .../TypeSystem/Clike/TypeSystemClike.h | 200 ++++++++ 4 files changed, 690 insertions(+) create mode 100644 lldb/source/Plugins/TypeSystem/Clike/CMakeLists.txt create mode 100644 lldb/source/Plugins/TypeSystem/Clike/TypeSystemClike.cpp create mode 100644 lldb/source/Plugins/TypeSystem/Clike/TypeSystemClike.h diff --git a/lldb/source/Plugins/TypeSystem/CMakeLists.txt b/lldb/source/Plugins/TypeSystem/CMakeLists.txt index 47e32ff176d8c..a87d15f513211 100644 --- a/lldb/source/Plugins/TypeSystem/CMakeLists.txt +++ b/lldb/source/Plugins/TypeSystem/CMakeLists.txt @@ -3,3 +3,4 @@ set_property(DIRECTORY PROPERTY LLDB_PLUGIN_KIND TypeSystem) set_property(DIRECTORY PROPERTY LLDB_TOLERATED_PLUGIN_DEPENDENCIES SymbolFile) add_subdirectory(Clang) +add_subdirectory(Clike) diff --git a/lldb/source/Plugins/TypeSystem/Clike/CMakeLists.txt b/lldb/source/Plugins/TypeSystem/Clike/CMakeLists.txt new file mode 100644 index 0000000000000..89e1771177109 --- /dev/null +++ b/lldb/source/Plugins/TypeSystem/Clike/CMakeLists.txt @@ -0,0 +1,10 @@ +add_lldb_library(lldbPluginTypeSystemClike PLUGIN + TypeSystemClike.cpp + + LINK_COMPONENTS + Support + LINK_LIBS + lldbCore + lldbSymbol + lldbUtility +) diff --git a/lldb/source/Plugins/TypeSystem/Clike/TypeSystemClike.cpp b/lldb/source/Plugins/TypeSystem/Clike/TypeSystemClike.cpp new file mode 100644 index 0000000000000..1a08c1c5db0b5 --- /dev/null +++ b/lldb/source/Plugins/TypeSystem/Clike/TypeSystemClike.cpp @@ -0,0 +1,479 @@ +//===-- TypeSystemClike.cpp +//-------------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "TypeSystemClike.h" + +#include "lldb/Core/PluginManager.h" +#include "lldb/Symbol/Type.h" +#include "llvm/ADT/APFloat.h" + +#include <optional> + +using namespace lldb_private; + +LLDB_PLUGIN_DEFINE(TypeSystemClike) + +char TypeSystemClike::ID; + +TypeSystemClike::TypeSystemClike() = default; + +TypeSystemClike::~TypeSystemClike() = default; + +lldb::TypeSystemSP TypeSystemClike::CreateInstance(lldb::LanguageType language, + Module *module, + Target *target) { + return lldb::TypeSystemSP(); +} + +LanguageSet TypeSystemClike::GetSupportedLanguagesForTypes() { + return LanguageSet(); +} + +LanguageSet TypeSystemClike::GetSupportedLanguagesForExpressions() { + return LanguageSet(); +} + +void TypeSystemClike::Initialize() { + PluginManager::RegisterPlugin(GetPluginNameStatic(), + "C/C++/Objective-C++ TypeSystem plug-in", + CreateInstance, GetSupportedLanguagesForTypes(), + GetSupportedLanguagesForExpressions()); +} + +void TypeSystemClike::Terminate() { + PluginManager::UnregisterPlugin(CreateInstance); +} + +ConstString TypeSystemClike::DeclGetName(void *opaque_decl) { + return ConstString(); +} + +CompilerType TypeSystemClike::GetTypeForDecl(void *opaque_decl) { + return CompilerType(); +} + +ConstString TypeSystemClike::DeclContextGetName(void *opaque_decl_ctx) { + return ConstString(); +} + +ConstString +TypeSystemClike::DeclContextGetScopeQualifiedName(void *opaque_decl_ctx) { + return ConstString(); +} + +bool TypeSystemClike::DeclContextIsClassMethod(void *opaque_decl_ctx) { + return false; +} + +bool TypeSystemClike::DeclContextIsContainedInLookup( + void *opaque_decl_ctx, void *other_opaque_decl_ctx) { + return false; +} + +lldb::LanguageType +TypeSystemClike::DeclContextGetLanguage(void *opaque_decl_ctx) { + return lldb::eLanguageTypeUnknown; +} + +bool TypeSystemClike::Verify(lldb::opaque_compiler_type_t type) { + return false; +} + +bool TypeSystemClike::IsArrayType(lldb::opaque_compiler_type_t type, + CompilerType *element_type, uint64_t *size, + bool *is_incomplete) { + return false; +} + +bool TypeSystemClike::IsAggregateType(lldb::opaque_compiler_type_t type) { + return false; +} + +bool TypeSystemClike::IsCharType(lldb::opaque_compiler_type_t type) { + return false; +} + +bool TypeSystemClike::IsCompleteType(lldb::opaque_compiler_type_t type) { + return false; +} + +bool TypeSystemClike::IsDefined(lldb::opaque_compiler_type_t type) { + return false; +} + +bool TypeSystemClike::IsFloatingPointType(lldb::opaque_compiler_type_t type) { + return false; +} + +bool TypeSystemClike::IsFunctionType(lldb::opaque_compiler_type_t type) { + return false; +} + +size_t TypeSystemClike::GetNumberOfFunctionArguments( + lldb::opaque_compiler_type_t type) { + return 0; +} + +CompilerType +TypeSystemClike::GetFunctionArgumentAtIndex(lldb::opaque_compiler_type_t type, + const size_t index) { + return CompilerType(); +} + +bool TypeSystemClike::IsFunctionPointerType(lldb::opaque_compiler_type_t type) { + return false; +} + +bool TypeSystemClike::IsMemberFunctionPointerType( + lldb::opaque_compiler_type_t type) { + return false; +} + +bool TypeSystemClike::IsMemberDataPointerType( + lldb::opaque_compiler_type_t type) { + return false; +} + +bool TypeSystemClike::IsBlockPointerType( + lldb::opaque_compiler_type_t type, + CompilerType *function_pointer_type_ptr) { + return false; +} + +bool TypeSystemClike::IsIntegerType(lldb::opaque_compiler_type_t type, + bool &is_signed) { + return false; +} + +bool TypeSystemClike::IsScopedEnumerationType( + lldb::opaque_compiler_type_t type) { + return false; +} + +bool TypeSystemClike::IsPossibleDynamicType(lldb::opaque_compiler_type_t type, + CompilerType *target_type, + bool check_cplusplus, + bool check_objc) { + return false; +} + +bool TypeSystemClike::IsPointerType(lldb::opaque_compiler_type_t type, + CompilerType *pointee_type) { + return false; +} + +bool TypeSystemClike::IsScalarType(lldb::opaque_compiler_type_t type) { + return false; +} + +bool TypeSystemClike::IsVoidType(lldb::opaque_compiler_type_t type) { + return false; +} + +bool TypeSystemClike::CanPassInRegisters(const CompilerType &type) { + return false; +} + +bool TypeSystemClike::SupportsLanguage(lldb::LanguageType language) { + return false; +} + +bool TypeSystemClike::GetCompleteType(lldb::opaque_compiler_type_t type) { + return false; +} + +uint32_t TypeSystemClike::GetPointerByteSize() { return 0; } + +CompilerType TypeSystemClike::GetPointerDiffType(bool is_signed) { + return CompilerType(); +} + +CompilerType TypeSystemClike::GetSizeType() { return CompilerType(); } + +unsigned TypeSystemClike::GetPtrAuthKey(lldb::opaque_compiler_type_t type) { + return 0; +} + +unsigned +TypeSystemClike::GetPtrAuthDiscriminator(lldb::opaque_compiler_type_t type) { + return 0; +} + +bool TypeSystemClike::GetPtrAuthAddressDiversity( + lldb::opaque_compiler_type_t type) { + return false; +} + +ConstString TypeSystemClike::GetTypeName(lldb::opaque_compiler_type_t type, + bool BaseOnly) { + return ConstString(); +} + +ConstString +TypeSystemClike::GetDisplayTypeName(lldb::opaque_compiler_type_t type) { + return ConstString(); +} + +uint32_t +TypeSystemClike::GetTypeInfo(lldb::opaque_compiler_type_t type, + CompilerType *pointee_or_element_compiler_type) { + return 0; +} + +lldb::LanguageType +TypeSystemClike::GetMinimumLanguage(lldb::opaque_compiler_type_t type) { + return lldb::eLanguageTypeUnknown; +} + +lldb::TypeClass +TypeSystemClike::GetTypeClass(lldb::opaque_compiler_type_t type) { + return lldb::eTypeClassInvalid; +} + +CompilerType +TypeSystemClike::GetArrayElementType(lldb::opaque_compiler_type_t type, + ExecutionContextScope *exe_scope) { + return CompilerType(); +} + +CompilerType +TypeSystemClike::GetCanonicalType(lldb::opaque_compiler_type_t type) { + return CompilerType(); +} + +CompilerType +TypeSystemClike::GetEnumerationIntegerType(lldb::opaque_compiler_type_t type) { + return CompilerType(); +} + +int TypeSystemClike::GetFunctionArgumentCount( + lldb::opaque_compiler_type_t type) { + return 0; +} + +CompilerType TypeSystemClike::GetFunctionArgumentTypeAtIndex( + lldb::opaque_compiler_type_t type, size_t idx) { + return CompilerType(); +} + +CompilerType +TypeSystemClike::GetFunctionReturnType(lldb::opaque_compiler_type_t type) { + return CompilerType(); +} + +size_t +TypeSystemClike::GetNumMemberFunctions(lldb::opaque_compiler_type_t type) { + return 0; +} + +TypeMemberFunctionImpl +TypeSystemClike::GetMemberFunctionAtIndex(lldb::opaque_compiler_type_t type, + size_t idx) { + return TypeMemberFunctionImpl(); +} + +CompilerType +TypeSystemClike::GetPointeeType(lldb::opaque_compiler_type_t type) { + return CompilerType(); +} + +CompilerType +TypeSystemClike::GetPointerType(lldb::opaque_compiler_type_t type) { + return CompilerType(); +} + +const llvm::fltSemantics & +TypeSystemClike::GetFloatTypeSemantics(size_t byte_size, lldb::Format format) { + return llvm::APFloat::Bogus(); +} + +llvm::Expected<uint64_t> +TypeSystemClike::GetBitSize(lldb::opaque_compiler_type_t type, + ExecutionContextScope *exe_scope) { + return 0; +} + +lldb::Encoding TypeSystemClike::GetEncoding(lldb::opaque_compiler_type_t type) { + return lldb::eEncodingInvalid; +} + +lldb::Format TypeSystemClike::GetFormat(lldb::opaque_compiler_type_t type) { + return lldb::eFormatDefault; +} + +llvm::Expected<uint32_t> +TypeSystemClike::GetNumChildren(lldb::opaque_compiler_type_t type, + bool omit_empty_base_classes, + const ExecutionContext *exe_ctx) { + return 0; +} + +lldb::BasicType +TypeSystemClike::GetBasicTypeEnumeration(lldb::opaque_compiler_type_t type) { + return lldb::eBasicTypeInvalid; +} + +uint32_t TypeSystemClike::GetNumFields(lldb::opaque_compiler_type_t type) { + return 0; +} + +CompilerType TypeSystemClike::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) { + return CompilerType(); +} + +uint32_t +TypeSystemClike::GetNumDirectBaseClasses(lldb::opaque_compiler_type_t type) { + return 0; +} + +uint32_t +TypeSystemClike::GetNumVirtualBaseClasses(lldb::opaque_compiler_type_t type) { + return 0; +} + +CompilerType TypeSystemClike::GetDirectBaseClassAtIndex( + lldb::opaque_compiler_type_t type, size_t idx, uint32_t *bit_offset_ptr) { + return CompilerType(); +} + +CompilerType TypeSystemClike::GetVirtualBaseClassAtIndex( + lldb::opaque_compiler_type_t type, size_t idx, uint32_t *bit_offset_ptr) { + return CompilerType(); +} + +llvm::Expected<CompilerType> TypeSystemClike::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) { + return CompilerType(); +} + +llvm::Expected<CompilerType> TypeSystemClike::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) { + return CompilerType(); +} + +llvm::Expected<uint32_t> +TypeSystemClike::GetIndexOfChildWithName(lldb::opaque_compiler_type_t type, + llvm::StringRef name, + bool omit_empty_base_classes) { + return 0; +} + +size_t TypeSystemClike::GetIndexOfChildMemberWithName( + lldb::opaque_compiler_type_t type, llvm::StringRef name, + bool omit_empty_base_classes, std::vector<uint32_t> &child_indexes) { + return 0; +} + +bool TypeSystemClike::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) { + return false; +} + +void TypeSystemClike::DumpTypeDescription(lldb::opaque_compiler_type_t type, + lldb::DescriptionLevel level) {} + +void TypeSystemClike::DumpTypeDescription(lldb::opaque_compiler_type_t type, + Stream &s, + lldb::DescriptionLevel level) {} + +void TypeSystemClike::Dump(llvm::raw_ostream &output, llvm::StringRef filter, + bool show_color) {} + +bool TypeSystemClike::IsRuntimeGeneratedType( + lldb::opaque_compiler_type_t type) { + return false; +} + +bool TypeSystemClike::IsPointerOrReferenceType( + lldb::opaque_compiler_type_t type, CompilerType *pointee_type) { + return false; +} + +unsigned TypeSystemClike::GetTypeQualifiers(lldb::opaque_compiler_type_t type) { + return 0; +} + +std::optional<size_t> +TypeSystemClike::GetTypeBitAlign(lldb::opaque_compiler_type_t type, + ExecutionContextScope *exe_scope) { + return std::nullopt; +} + +CompilerType TypeSystemClike::GetBasicTypeFromAST(lldb::BasicType basic_type) { + return CompilerType(); +} + +CompilerType +TypeSystemClike::GetBuiltinTypeForEncodingAndBitSize(lldb::Encoding encoding, + size_t bit_size) { + return CompilerType(); +} + +bool TypeSystemClike::IsBeingDefined(lldb::opaque_compiler_type_t type) { + return false; +} + +bool TypeSystemClike::IsConst(lldb::opaque_compiler_type_t type) { + return false; +} + +uint32_t +TypeSystemClike::IsHomogeneousAggregate(lldb::opaque_compiler_type_t type, + CompilerType *base_type_ptr) { + return 0; +} + +bool TypeSystemClike::IsPolymorphicClass(lldb::opaque_compiler_type_t type) { + return false; +} + +bool TypeSystemClike::IsTypedefType(lldb::opaque_compiler_type_t type) { + return false; +} + +CompilerType +TypeSystemClike::GetTypedefedType(lldb::opaque_compiler_type_t type) { + return CompilerType(); +} + +bool TypeSystemClike::IsVectorType(lldb::opaque_compiler_type_t type, + CompilerType *element_type, uint64_t *size) { + return false; +} + +CompilerType +TypeSystemClike::GetFullyUnqualifiedType(lldb::opaque_compiler_type_t type) { + return CompilerType(); +} + +CompilerType +TypeSystemClike::GetNonReferenceType(lldb::opaque_compiler_type_t type) { + return CompilerType(); +} + +bool TypeSystemClike::IsReferenceType(lldb::opaque_compiler_type_t type, + CompilerType *pointee_type, + bool *is_rvalue) { + return false; +} diff --git a/lldb/source/Plugins/TypeSystem/Clike/TypeSystemClike.h b/lldb/source/Plugins/TypeSystem/Clike/TypeSystemClike.h new file mode 100644 index 0000000000000..06c7ee37a7ee5 --- /dev/null +++ b/lldb/source/Plugins/TypeSystem/Clike/TypeSystemClike.h @@ -0,0 +1,200 @@ +//===-- TypeSystemClike.h ---------------------------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef LLDB_SOURCE_PLUGINS_TYPESYSTEM_CLIKE_TYPESYSTEMCLIKE_H +#define LLDB_SOURCE_PLUGINS_TYPESYSTEM_CLIKE_TYPESYSTEMCLIKE_H + +#include "lldb/Symbol/CompilerType.h" +#include "lldb/Symbol/TypeSystem.h" + +namespace lldb_private { + +/// A TypeSystem for Clike languages such as C, C++ and Objective-C. +class TypeSystemClike : public TypeSystem { + // LLVM RTTI support + static char ID; + +public: + TypeSystemClike(); + ~TypeSystemClike() override; + + // PluginInterface + static void Initialize(); + static void Terminate(); + static llvm::StringRef GetPluginNameStatic() { return "cpp"; } + llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); } + + static lldb::TypeSystemSP CreateInstance(lldb::LanguageType language, + Module *module, Target *target); + static LanguageSet GetSupportedLanguagesForTypes(); + static LanguageSet GetSupportedLanguagesForExpressions(); + + // LLVM RTTI support + bool isA(const void *ClassID) const override { return ClassID == &ID; } + static bool classof(const TypeSystem *ts) { return ts->isA(&ID); } + + ConstString DeclGetName(void *opaque_decl) override; + CompilerType GetTypeForDecl(void *opaque_decl) override; + ConstString DeclContextGetName(void *opaque_decl_ctx) override; + ConstString DeclContextGetScopeQualifiedName(void *opaque_decl_ctx) override; + bool DeclContextIsClassMethod(void *opaque_decl_ctx) override; + bool DeclContextIsContainedInLookup(void *opaque_decl_ctx, + void *other_opaque_decl_ctx) override; + lldb::LanguageType DeclContextGetLanguage(void *opaque_decl_ctx) override; + bool Verify(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 IsAggregateType(lldb::opaque_compiler_type_t type) override; + bool IsCharType(lldb::opaque_compiler_type_t type) override; + bool IsCompleteType(lldb::opaque_compiler_type_t type) override; + bool IsDefined(lldb::opaque_compiler_type_t type) override; + bool IsFloatingPointType(lldb::opaque_compiler_type_t type) override; + bool IsFunctionType(lldb::opaque_compiler_type_t type) override; + size_t + GetNumberOfFunctionArguments(lldb::opaque_compiler_type_t type) override; + CompilerType GetFunctionArgumentAtIndex(lldb::opaque_compiler_type_t type, + const size_t index) override; + bool IsFunctionPointerType(lldb::opaque_compiler_type_t type) override; + bool IsMemberFunctionPointerType(lldb::opaque_compiler_type_t type) override; + bool IsMemberDataPointerType(lldb::opaque_compiler_type_t type) override; + bool IsBlockPointerType(lldb::opaque_compiler_type_t type, + CompilerType *function_pointer_type_ptr) override; + bool IsIntegerType(lldb::opaque_compiler_type_t type, + bool &is_signed) override; + bool IsScopedEnumerationType(lldb::opaque_compiler_type_t type) override; + bool IsPossibleDynamicType(lldb::opaque_compiler_type_t type, + CompilerType *target_type, bool check_cplusplus, + bool check_objc) override; + bool IsPointerType(lldb::opaque_compiler_type_t type, + CompilerType *pointee_type) override; + bool IsScalarType(lldb::opaque_compiler_type_t type) override; + bool IsVoidType(lldb::opaque_compiler_type_t type) override; + bool CanPassInRegisters(const CompilerType &type) override; + bool SupportsLanguage(lldb::LanguageType language) override; + bool GetCompleteType(lldb::opaque_compiler_type_t type) override; + uint32_t GetPointerByteSize() override; + CompilerType GetPointerDiffType(bool is_signed) override; + CompilerType GetSizeType() override; + unsigned GetPtrAuthKey(lldb::opaque_compiler_type_t type) override; + unsigned GetPtrAuthDiscriminator(lldb::opaque_compiler_type_t type) override; + bool GetPtrAuthAddressDiversity(lldb::opaque_compiler_type_t type) override; + ConstString GetTypeName(lldb::opaque_compiler_type_t type, + bool BaseOnly) override; + ConstString GetDisplayTypeName(lldb::opaque_compiler_type_t type) override; + uint32_t GetTypeInfo(lldb::opaque_compiler_type_t type, + CompilerType *pointee_or_element_compiler_type) override; + lldb::LanguageType + GetMinimumLanguage(lldb::opaque_compiler_type_t type) override; + lldb::TypeClass GetTypeClass(lldb::opaque_compiler_type_t type) override; + CompilerType GetArrayElementType(lldb::opaque_compiler_type_t type, + ExecutionContextScope *exe_scope) override; + CompilerType GetCanonicalType(lldb::opaque_compiler_type_t type) override; + CompilerType + GetEnumerationIntegerType(lldb::opaque_compiler_type_t type) override; + int GetFunctionArgumentCount(lldb::opaque_compiler_type_t type) override; + CompilerType GetFunctionArgumentTypeAtIndex(lldb::opaque_compiler_type_t type, + size_t idx) override; + CompilerType + GetFunctionReturnType(lldb::opaque_compiler_type_t type) override; + size_t GetNumMemberFunctions(lldb::opaque_compiler_type_t type) override; + TypeMemberFunctionImpl + GetMemberFunctionAtIndex(lldb::opaque_compiler_type_t type, + size_t idx) override; + CompilerType GetPointeeType(lldb::opaque_compiler_type_t type) override; + CompilerType GetPointerType(lldb::opaque_compiler_type_t type) override; + const llvm::fltSemantics &GetFloatTypeSemantics(size_t byte_size, + lldb::Format format) override; + llvm::Expected<uint64_t> + GetBitSize(lldb::opaque_compiler_type_t type, + ExecutionContextScope *exe_scope) override; + lldb::Encoding GetEncoding(lldb::opaque_compiler_type_t type) override; + lldb::Format GetFormat(lldb::opaque_compiler_type_t type) override; + llvm::Expected<uint32_t> + GetNumChildren(lldb::opaque_compiler_type_t type, + bool omit_empty_base_classes, + const ExecutionContext *exe_ctx) override; + lldb::BasicType + GetBasicTypeEnumeration(lldb::opaque_compiler_type_t type) override; + uint32_t GetNumFields(lldb::opaque_compiler_type_t type) override; + 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; + uint32_t GetNumDirectBaseClasses(lldb::opaque_compiler_type_t type) override; + uint32_t GetNumVirtualBaseClasses(lldb::opaque_compiler_type_t type) override; + CompilerType GetDirectBaseClassAtIndex(lldb::opaque_compiler_type_t type, + size_t idx, + uint32_t *bit_offset_ptr) override; + CompilerType GetVirtualBaseClassAtIndex(lldb::opaque_compiler_type_t type, + size_t idx, + uint32_t *bit_offset_ptr) 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; + 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; + llvm::Expected<uint32_t> + GetIndexOfChildWithName(lldb::opaque_compiler_type_t type, + llvm::StringRef name, + bool omit_empty_base_classes) 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; + 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; + void DumpTypeDescription( + lldb::opaque_compiler_type_t type, + lldb::DescriptionLevel level = lldb::eDescriptionLevelFull) override; + void DumpTypeDescription( + lldb::opaque_compiler_type_t type, Stream &s, + lldb::DescriptionLevel level = lldb::eDescriptionLevelFull) override; + void Dump(llvm::raw_ostream &output, llvm::StringRef filter, + bool show_color) override; + bool IsRuntimeGeneratedType(lldb::opaque_compiler_type_t type) override; + bool IsPointerOrReferenceType(lldb::opaque_compiler_type_t type, + CompilerType *pointee_type) override; + unsigned GetTypeQualifiers(lldb::opaque_compiler_type_t type) override; + std::optional<size_t> + GetTypeBitAlign(lldb::opaque_compiler_type_t type, + ExecutionContextScope *exe_scope) override; + CompilerType GetBasicTypeFromAST(lldb::BasicType basic_type) override; + CompilerType GetBuiltinTypeForEncodingAndBitSize(lldb::Encoding encoding, + size_t bit_size) override; + bool IsBeingDefined(lldb::opaque_compiler_type_t type) override; + bool IsConst(lldb::opaque_compiler_type_t type) override; + uint32_t IsHomogeneousAggregate(lldb::opaque_compiler_type_t type, + CompilerType *base_type_ptr) override; + bool IsPolymorphicClass(lldb::opaque_compiler_type_t type) override; + bool IsTypedefType(lldb::opaque_compiler_type_t type) override; + CompilerType GetTypedefedType(lldb::opaque_compiler_type_t type) override; + bool IsVectorType(lldb::opaque_compiler_type_t type, + CompilerType *element_type, uint64_t *size) override; + CompilerType + GetFullyUnqualifiedType(lldb::opaque_compiler_type_t type) override; + CompilerType GetNonReferenceType(lldb::opaque_compiler_type_t type) override; + bool IsReferenceType(lldb::opaque_compiler_type_t type, + CompilerType *pointee_type, bool *is_rvalue) override; +}; + +} // namespace lldb_private + +#endif // LLDB_SOURCE_PLUGINS_TYPESYSTEM_CLIKE_TYPESYSTEMCLIKE_H _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
