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

Reply via email to