Author: enrico Date: Tue Sep 22 20:39:46 2015 New Revision: 248359 URL: http://llvm.org/viewvc/llvm-project?rev=248359&view=rev Log: Add {TypeSystem|CompilerType}::GetTypeForFormatters()
Different type system may have different notions of attributes of a type that do not matter for data formatters matching purposes For instance, in the case of clang types, we remove some qualifiers (e.g. "volatile") as it doesn't make much sense to differentiate volatile T from T in the data formatters This new API allows each type system to generate, if needed, a type that does not have those unwanted attributes that the data formatters can then consume to generate matches Modified: lldb/trunk/include/lldb/Symbol/ClangASTContext.h lldb/trunk/include/lldb/Symbol/CompilerType.h lldb/trunk/include/lldb/Symbol/TypeSystem.h lldb/trunk/source/DataFormatters/FormatManager.cpp lldb/trunk/source/Symbol/ClangASTContext.cpp lldb/trunk/source/Symbol/CompilerType.cpp lldb/trunk/source/Symbol/TypeSystem.cpp Modified: lldb/trunk/include/lldb/Symbol/ClangASTContext.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/ClangASTContext.h?rev=248359&r1=248358&r2=248359&view=diff ============================================================================== --- lldb/trunk/include/lldb/Symbol/ClangASTContext.h (original) +++ lldb/trunk/include/lldb/Symbol/ClangASTContext.h Tue Sep 22 20:39:46 2015 @@ -904,6 +904,9 @@ public: size_t idx, lldb::TemplateArgumentKind &kind) override; + CompilerType + GetTypeForFormatters (void* type) override; + //---------------------------------------------------------------------- // Modifying RecordType //---------------------------------------------------------------------- Modified: lldb/trunk/include/lldb/Symbol/CompilerType.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/CompilerType.h?rev=248359&r1=248358&r2=248359&view=diff ============================================================================== --- lldb/trunk/include/lldb/Symbol/CompilerType.h (original) +++ lldb/trunk/include/lldb/Symbol/CompilerType.h Tue Sep 22 20:39:46 2015 @@ -456,6 +456,9 @@ public: GetTemplateArgument (size_t idx, lldb::TemplateArgumentKind &kind) const; + CompilerType + GetTypeForFormatters () const; + //------------------------------------------------------------------ // Pointers & References //------------------------------------------------------------------ Modified: lldb/trunk/include/lldb/Symbol/TypeSystem.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/TypeSystem.h?rev=248359&r1=248358&r2=248359&view=diff ============================================================================== --- lldb/trunk/include/lldb/Symbol/TypeSystem.h (original) +++ lldb/trunk/include/lldb/Symbol/TypeSystem.h Tue Sep 22 20:39:46 2015 @@ -504,6 +504,9 @@ public: return nullptr; } + virtual CompilerType + GetTypeForFormatters (void* type); + protected: const LLVMCastKind m_kind; // Support for llvm casting SymbolFile *m_sym_file; Modified: lldb/trunk/source/DataFormatters/FormatManager.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/DataFormatters/FormatManager.cpp?rev=248359&r1=248358&r2=248359&view=diff ============================================================================== --- lldb/trunk/source/DataFormatters/FormatManager.cpp (original) +++ lldb/trunk/source/DataFormatters/FormatManager.cpp Tue Sep 22 20:39:46 2015 @@ -199,7 +199,7 @@ FormatManager::GetPossibleMatches (Value bool did_strip_typedef, bool root_level) { - compiler_type = ClangASTContext::RemoveFastQualifiers(compiler_type); + compiler_type = compiler_type.GetTypeForFormatters(); ConstString type_name(compiler_type.GetConstTypeName()); if (valobj.GetBitfieldBitSize() > 0) { Modified: lldb/trunk/source/Symbol/ClangASTContext.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/ClangASTContext.cpp?rev=248359&r1=248358&r2=248359&view=diff ============================================================================== --- lldb/trunk/source/Symbol/ClangASTContext.cpp (original) +++ lldb/trunk/source/Symbol/ClangASTContext.cpp Tue Sep 22 20:39:46 2015 @@ -6801,6 +6801,14 @@ ClangASTContext::GetTemplateArgument (ll return CompilerType (); } +CompilerType +ClangASTContext::GetTypeForFormatters (void* type) +{ + if (type) + return RemoveFastQualifiers(CompilerType(this, type)); + return CompilerType(); +} + static bool IsOperator (const char *name, clang::OverloadedOperatorKind &op_kind) { Modified: lldb/trunk/source/Symbol/CompilerType.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/CompilerType.cpp?rev=248359&r1=248358&r2=248359&view=diff ============================================================================== --- lldb/trunk/source/Symbol/CompilerType.cpp (original) +++ lldb/trunk/source/Symbol/CompilerType.cpp Tue Sep 22 20:39:46 2015 @@ -851,6 +851,13 @@ CompilerType::GetTemplateArgument (size_ return CompilerType(); } +CompilerType +CompilerType::GetTypeForFormatters () const +{ + if (IsValid()) + return m_type_system->GetTypeForFormatters(m_type); + return CompilerType(); +} // Get the index of the child of "clang_type" whose name matches. This function // doesn't descend into the children, but only looks one level deep and name Modified: lldb/trunk/source/Symbol/TypeSystem.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/TypeSystem.cpp?rev=248359&r1=248358&r2=248359&view=diff ============================================================================== --- lldb/trunk/source/Symbol/TypeSystem.cpp (original) +++ lldb/trunk/source/Symbol/TypeSystem.cpp Tue Sep 22 20:39:46 2015 @@ -80,3 +80,8 @@ TypeSystem::GetBuiltinTypeByName (const return CompilerType(); } +CompilerType +TypeSystem::GetTypeForFormatters (void* type) +{ + return CompilerType(this, type); +} _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits