[Lldb-commits] [lldb] r249587 - This is the work I was building up to with my patches yesterday

Enrico Granata via lldb-commits lldb-commits at lists.llvm.org
Wed Oct 7 11:36:53 PDT 2015


Author: enrico
Date: Wed Oct  7 13:36:53 2015
New Revision: 249587

URL: http://llvm.org/viewvc/llvm-project?rev=249587&view=rev
Log:
This is the work I was building up to with my patches yesterday

Introduce the notion of Language-based formatter prefix/suffix
This is meant for languages that share certain data types but present them in syntatically different ways, such that LLDB can now have language-based awareness of which of the syntax variations it has to present to the user when formatting those values

This is goodness for new languages and interoperability, but is NFC for existing languages. As such, existing tests cover this


Modified:
    lldb/trunk/include/lldb/Target/Language.h
    lldb/trunk/source/Plugins/Language/ObjC/CF.cpp
    lldb/trunk/source/Plugins/Language/ObjC/Cocoa.cpp
    lldb/trunk/source/Plugins/Language/ObjC/NSArray.cpp
    lldb/trunk/source/Plugins/Language/ObjC/NSDictionary.cpp
    lldb/trunk/source/Plugins/Language/ObjC/NSSet.cpp
    lldb/trunk/source/Plugins/Language/ObjC/NSString.cpp
    lldb/trunk/source/Plugins/Language/ObjC/NSString.h
    lldb/trunk/source/Plugins/Language/ObjC/ObjCLanguage.cpp
    lldb/trunk/source/Plugins/Language/ObjC/ObjCLanguage.h
    lldb/trunk/source/Target/Language.cpp
    lldb/trunk/test/functionalities/data-formatter/data-formatter-objc/TestDataFormatterObjC.py
    lldb/trunk/test/functionalities/data-formatter/data-formatter-proper-plurals/TestFormattersOneIsSingular.py
    lldb/trunk/test/functionalities/data-formatter/nsarraysynth/TestNSArraySynthetic.py
    lldb/trunk/test/functionalities/data-formatter/nsdictionarysynth/TestNSDictionarySynthetic.py
    lldb/trunk/test/functionalities/data-formatter/nsdictionarysynth/main.m
    lldb/trunk/test/functionalities/data-formatter/nssetsynth/TestNSSetSynthetic.py
    lldb/trunk/test/functionalities/data-formatter/synthupdate/TestSyntheticFilterRecompute.py

Modified: lldb/trunk/include/lldb/Target/Language.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/Language.h?rev=249587&r1=249586&r2=249587&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Target/Language.h (original)
+++ lldb/trunk/include/lldb/Target/Language.h Wed Oct  7 13:36:53 2015
@@ -79,7 +79,7 @@ public:
     virtual lldb::LanguageType
     GetLanguageType () const = 0;
     
-    bool
+    virtual bool
     IsTopLevelFunction (Function& function);
     
     virtual lldb::TypeCategoryImplSP
@@ -106,6 +106,13 @@ public:
     virtual std::unique_ptr<TypeScavenger>
     GetTypeScavenger ();
     
+    // if an individual data formatter can apply to several types and cross a language boundary
+    // it makes sense for individual languages to want to customize the printing of values of that
+    // type by appending proper prefix/suffix information in language-specific ways
+    virtual bool
+    GetFormatterPrefixSuffix (ValueObject& valobj, ConstString type_hint,
+                              std::string& prefix, std::string& suffix);
+    
     // These are accessors for general information about the Languages lldb knows about:
     
     static lldb::LanguageType

Modified: lldb/trunk/source/Plugins/Language/ObjC/CF.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Language/ObjC/CF.cpp?rev=249587&r1=249586&r2=249587&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Language/ObjC/CF.cpp (original)
+++ lldb/trunk/source/Plugins/Language/ObjC/CF.cpp Wed Oct  7 13:36:53 2015
@@ -17,6 +17,7 @@
 #include "lldb/DataFormatters/FormattersHelpers.h"
 #include "lldb/Host/Endian.h"
 #include "lldb/Symbol/ClangASTContext.h"
+#include "lldb/Target/Language.h"
 #include "lldb/Target/ObjCLanguageRuntime.h"
 #include "lldb/Target/Target.h"
 
@@ -42,6 +43,8 @@ lldb_private::formatters::CFAbsoluteTime
 bool
 lldb_private::formatters::CFBagSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options)
 {
+    static ConstString g_TypeHint("CFBag");
+    
     ProcessSP process_sp = valobj.GetProcessSP();
     if (!process_sp)
         return false;
@@ -84,7 +87,9 @@ lldb_private::formatters::CFBagSummaryPr
         ValueObjectSP count_sp;
         StreamString expr;
         expr.Printf("(int)CFBagGetCount((void*)0x%" PRIx64 ")",valobj.GetPointerValue());
-        if (process_sp->GetTarget().EvaluateExpression(expr.GetData(), frame_sp.get(), count_sp) != eExpressionCompleted)
+        EvaluateExpressionOptions options;
+        options.SetResultIsInternal(true);
+        if (process_sp->GetTarget().EvaluateExpression(expr.GetData(), frame_sp.get(), count_sp, options) != eExpressionCompleted)
             return false;
         if (!count_sp)
             return false;
@@ -98,8 +103,21 @@ lldb_private::formatters::CFBagSummaryPr
         if (error.Fail())
             return false;
     }
-    stream.Printf("@\"%u value%s\"",
-                  count,(count == 1 ? "" : "s"));
+    
+    std::string prefix,suffix;
+    if (Language* language = Language::FindPlugin(options.GetLanguage()))
+    {
+        if (!language->GetFormatterPrefixSuffix(valobj, g_TypeHint, prefix, suffix))
+        {
+            prefix.clear();
+            suffix.clear();
+        }
+    }
+    
+    stream.Printf("%s\"%u value%s\"%s",
+                  prefix.c_str(),
+                  count,(count == 1 ? "" : "s"),
+                  suffix.c_str());
     return true;
 }
 
@@ -236,6 +254,8 @@ lldb_private::formatters::CFBitVectorSum
 bool
 lldb_private::formatters::CFBinaryHeapSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options)
 {
+    static ConstString g_TypeHint("CFBinaryHeap");
+    
     ProcessSP process_sp = valobj.GetProcessSP();
     if (!process_sp)
         return false;
@@ -278,7 +298,9 @@ lldb_private::formatters::CFBinaryHeapSu
         ValueObjectSP count_sp;
         StreamString expr;
         expr.Printf("(int)CFBinaryHeapGetCount((void*)0x%" PRIx64 ")",valobj.GetPointerValue());
-        if (process_sp->GetTarget().EvaluateExpression(expr.GetData(), frame_sp.get(), count_sp) != eExpressionCompleted)
+        EvaluateExpressionOptions options;
+        options.SetResultIsInternal(true);
+        if (process_sp->GetTarget().EvaluateExpression(expr.GetData(), frame_sp.get(), count_sp, options) != eExpressionCompleted)
             return false;
         if (!count_sp)
             return false;
@@ -292,7 +314,20 @@ lldb_private::formatters::CFBinaryHeapSu
         if (error.Fail())
             return false;
     }
-    stream.Printf("@\"%u item%s\"",
-                  count,(count == 1 ? "" : "s"));
+    
+    std::string prefix,suffix;
+    if (Language* language = Language::FindPlugin(options.GetLanguage()))
+    {
+        if (!language->GetFormatterPrefixSuffix(valobj, g_TypeHint, prefix, suffix))
+        {
+            prefix.clear();
+            suffix.clear();
+        }
+    }
+    
+    stream.Printf("%s\"%u item%s\"%s",
+                  prefix.c_str(),
+                  count,(count == 1 ? "" : "s"),
+                  suffix.c_str());
     return true;
 }

Modified: lldb/trunk/source/Plugins/Language/ObjC/Cocoa.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Language/ObjC/Cocoa.cpp?rev=249587&r1=249586&r2=249587&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Language/ObjC/Cocoa.cpp (original)
+++ lldb/trunk/source/Plugins/Language/ObjC/Cocoa.cpp Wed Oct  7 13:36:53 2015
@@ -20,6 +20,7 @@
 #include "lldb/DataFormatters/TypeSummary.h"
 #include "lldb/Host/Endian.h"
 #include "lldb/Symbol/ClangASTContext.h"
+#include "lldb/Target/Language.h"
 #include "lldb/Target/ObjCLanguageRuntime.h"
 #include "lldb/Target/Target.h"
 #include "lldb/Target/Process.h"
@@ -64,7 +65,7 @@ lldb_private::formatters::NSBundleSummar
     {
         uint64_t offset = 5 * ptr_size;
         ValueObjectSP text(valobj.GetSyntheticChildAtOffset(offset, valobj.GetCompilerType().GetBasicTypeFromAST(lldb::eBasicTypeObjCID), true));
-
+        
         StreamString summary_stream;
         bool was_nsstring_ok = NSStringSummaryProvider(*text.get(), summary_stream, options);
         if (was_nsstring_ok && summary_stream.GetSize() > 0)
@@ -295,6 +296,145 @@ lldb_private::formatters::NSIndexSetSumm
     return true;
 }
 
+static void
+NSNumber_FormatChar (ValueObject& valobj,
+                     Stream& stream,
+                     char value,
+                     lldb::LanguageType lang)
+{
+    static ConstString g_TypeHint("NSNumber:char");
+    
+    std::string prefix,suffix;
+    if (Language* language = Language::FindPlugin(lang))
+    {
+        if (!language->GetFormatterPrefixSuffix(valobj, g_TypeHint, prefix, suffix))
+        {
+            prefix.clear();
+            suffix.clear();
+        }
+    }
+    
+    stream.Printf("%s%hhd%s",
+                  prefix.c_str(),
+                  value,
+                  suffix.c_str());
+}
+static void
+NSNumber_FormatShort (ValueObject& valobj,
+                      Stream& stream,
+                      short value,
+                      lldb::LanguageType lang)
+{
+    static ConstString g_TypeHint("NSNumber:short");
+    
+    std::string prefix,suffix;
+    if (Language* language = Language::FindPlugin(lang))
+    {
+        if (!language->GetFormatterPrefixSuffix(valobj, g_TypeHint, prefix, suffix))
+        {
+            prefix.clear();
+            suffix.clear();
+        }
+    }
+    
+    stream.Printf("%s%hd%s",
+                  prefix.c_str(),
+                  value,
+                  suffix.c_str());
+}
+static void
+NSNumber_FormatInt (ValueObject& valobj,
+                    Stream& stream,
+                    int value,
+                    lldb::LanguageType lang)
+{
+    static ConstString g_TypeHint("NSNumber:int");
+    
+    std::string prefix,suffix;
+    if (Language* language = Language::FindPlugin(lang))
+    {
+        if (!language->GetFormatterPrefixSuffix(valobj, g_TypeHint, prefix, suffix))
+        {
+            prefix.clear();
+            suffix.clear();
+        }
+    }
+    
+    stream.Printf("%s%d%s",
+                  prefix.c_str(),
+                  value,
+                  suffix.c_str());
+}
+static void
+NSNumber_FormatLong (ValueObject& valobj,
+                     Stream& stream,
+                     uint64_t value,
+                     lldb::LanguageType lang)
+{
+    static ConstString g_TypeHint("NSNumber:long");
+    
+    std::string prefix,suffix;
+    if (Language* language = Language::FindPlugin(lang))
+    {
+        if (!language->GetFormatterPrefixSuffix(valobj, g_TypeHint, prefix, suffix))
+        {
+            prefix.clear();
+            suffix.clear();
+        }
+    }
+    
+    stream.Printf("%s%" PRId64 "%s",
+                  prefix.c_str(),
+                  value,
+                  suffix.c_str());
+}
+static void
+NSNumber_FormatFloat (ValueObject& valobj,
+                      Stream& stream,
+                      float value,
+                      lldb::LanguageType lang)
+{
+    static ConstString g_TypeHint("NSNumber:float");
+    
+    std::string prefix,suffix;
+    if (Language* language = Language::FindPlugin(lang))
+    {
+        if (!language->GetFormatterPrefixSuffix(valobj, g_TypeHint, prefix, suffix))
+        {
+            prefix.clear();
+            suffix.clear();
+        }
+    }
+    
+    stream.Printf("%s%f%s",
+                  prefix.c_str(),
+                  value,
+                  suffix.c_str());
+}
+static void
+NSNumber_FormatDouble (ValueObject& valobj,
+                       Stream& stream,
+                       double value,
+                       lldb::LanguageType lang)
+{
+    static ConstString g_TypeHint("NSNumber:double");
+    
+    std::string prefix,suffix;
+    if (Language* language = Language::FindPlugin(lang))
+    {
+        if (!language->GetFormatterPrefixSuffix(valobj, g_TypeHint, prefix, suffix))
+        {
+            prefix.clear();
+            suffix.clear();
+        }
+    }
+    
+    stream.Printf("%s%g%s",
+                  prefix.c_str(),
+                  value,
+                  suffix.c_str());
+}
+
 bool
 lldb_private::formatters::NSNumberSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options)
 {
@@ -333,19 +473,19 @@ lldb_private::formatters::NSNumberSummar
             switch (i_bits)
             {
                 case 0:
-                    stream.Printf("(char)%hhd",(char)value);
+                    NSNumber_FormatChar(valobj, stream, (char)value, options.GetLanguage());
                     break;
                 case 1:
                 case 4:
-                    stream.Printf("(short)%hd",(short)value);
+                    NSNumber_FormatShort(valobj, stream, (short)value, options.GetLanguage());
                     break;
                 case 2:
                 case 8:
-                    stream.Printf("(int)%d",(int)value);
+                    NSNumber_FormatInt(valobj, stream, (int)value, options.GetLanguage());
                     break;
                 case 3:
                 case 12:
-                    stream.Printf("(long)%" PRId64,value);
+                    NSNumber_FormatLong(valobj, stream, value, options.GetLanguage());
                     break;
                 default:
                     return false;
@@ -366,19 +506,19 @@ lldb_private::formatters::NSNumberSummar
                     value = process_sp->ReadUnsignedIntegerFromMemory(data_location, 1, 0, error);
                     if (error.Fail())
                         return false;
-                    stream.Printf("(char)%hhd",(char)value);
+                    NSNumber_FormatChar(valobj, stream, (char)value, options.GetLanguage());
                     break;
                 case 2: // 0B0010
                     value = process_sp->ReadUnsignedIntegerFromMemory(data_location, 2, 0, error);
                     if (error.Fail())
                         return false;
-                    stream.Printf("(short)%hd",(short)value);
+                    NSNumber_FormatShort(valobj, stream, (short)value, options.GetLanguage());
                     break;
                 case 3: // 0B0011
                     value = process_sp->ReadUnsignedIntegerFromMemory(data_location, 4, 0, error);
                     if (error.Fail())
                         return false;
-                    stream.Printf("(int)%d",(int)value);
+                    NSNumber_FormatInt(valobj, stream, (int)value, options.GetLanguage());
                     break;
                 case 17: // 0B10001
                     data_location += 8;
@@ -386,7 +526,7 @@ lldb_private::formatters::NSNumberSummar
                     value = process_sp->ReadUnsignedIntegerFromMemory(data_location, 8, 0, error);
                     if (error.Fail())
                         return false;
-                    stream.Printf("(long)%" PRId64,value);
+                    NSNumber_FormatLong(valobj, stream, value, options.GetLanguage());
                     break;
                 case 5: // 0B0101
                 {
@@ -394,7 +534,7 @@ lldb_private::formatters::NSNumberSummar
                     if (error.Fail())
                         return false;
                     float flt_value = *((float*)&flt_as_int);
-                    stream.Printf("(float)%f",flt_value);
+                    NSNumber_FormatFloat(valobj, stream, flt_value, options.GetLanguage());
                     break;
                 }
                 case 6: // 0B0110
@@ -403,7 +543,7 @@ lldb_private::formatters::NSNumberSummar
                     if (error.Fail())
                         return false;
                     double dbl_value = *((double*)&dbl_as_lng);
-                    stream.Printf("(double)%g",dbl_value);
+                    NSNumber_FormatDouble(valobj, stream, dbl_value, options.GetLanguage());
                     break;
                 }
                 default:

Modified: lldb/trunk/source/Plugins/Language/ObjC/NSArray.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Language/ObjC/NSArray.cpp?rev=249587&r1=249586&r2=249587&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Language/ObjC/NSArray.cpp (original)
+++ lldb/trunk/source/Plugins/Language/ObjC/NSArray.cpp Wed Oct  7 13:36:53 2015
@@ -18,6 +18,7 @@
 #include "lldb/Expression/FunctionCaller.h"
 #include "lldb/Host/Endian.h"
 #include "lldb/Symbol/ClangASTContext.h"
+#include "lldb/Target/Language.h"
 #include "lldb/Target/ObjCLanguageRuntime.h"
 #include "Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntime.h"
 #include "lldb/Target/Target.h"
@@ -230,6 +231,8 @@ namespace  lldb_private {
 bool
 lldb_private::formatters::NSArraySummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options)
 {
+    static ConstString g_TypeHint("NSArray");
+    
     ProcessSP process_sp = valobj.GetProcessSP();
     if (!process_sp)
         return false;
@@ -285,16 +288,29 @@ lldb_private::formatters::NSArraySummary
             return false;
     }
     
-    stream.Printf("@\"%" PRIu64 " object%s\"",
+    std::string prefix,suffix;
+    if (Language* language = Language::FindPlugin(options.GetLanguage()))
+    {
+        if (!language->GetFormatterPrefixSuffix(valobj, g_TypeHint, prefix, suffix))
+        {
+            prefix.clear();
+            suffix.clear();
+        }
+    }
+    
+    stream.Printf("%s%" PRIu64 " %s%s%s",
+                  prefix.c_str(),
                   value,
-                  value == 1 ? "" : "s");
+                  "element",
+                  value == 1 ? "" : "s",
+                  suffix.c_str());
     return true;
 }
 
 lldb_private::formatters::NSArrayMSyntheticFrontEnd::NSArrayMSyntheticFrontEnd (lldb::ValueObjectSP valobj_sp) :
 SyntheticChildrenFrontEnd(*valobj_sp),
-    m_exe_ctx_ref(),
-    m_ptr_size(8),
+m_exe_ctx_ref(),
+m_ptr_size(8),
 m_id_type(),
 m_children()
 {
@@ -524,11 +540,11 @@ lldb_private::formatters::NSArrayMSynthe
 }
 
 lldb_private::formatters::NSArrayISyntheticFrontEnd::NSArrayISyntheticFrontEnd (lldb::ValueObjectSP valobj_sp) :
-    SyntheticChildrenFrontEnd (*valobj_sp.get()),
-    m_exe_ctx_ref (),
-    m_ptr_size (8),
-    m_items (0),
-    m_data_ptr (0)
+SyntheticChildrenFrontEnd (*valobj_sp.get()),
+m_exe_ctx_ref (),
+m_ptr_size (8),
+m_items (0),
+m_data_ptr (0)
 {
     if (valobj_sp)
     {
@@ -686,7 +702,10 @@ lldb_private::formatters::NSArrayCodeRun
     idx_name.Printf("[%" PRIu64 "]", (uint64_t)idx);
     lldb::ValueObjectSP valobj_sp = CallSelectorOnObject(m_backend,"id","objectAtIndex:",idx);
     if (valobj_sp)
+    {
+        valobj_sp->SetPreferredDisplayLanguage(m_backend.GetPreferredDisplayLanguage());
         valobj_sp->SetName(ConstString(idx_name.GetData()));
+    }
     return valobj_sp;
 }
 

Modified: lldb/trunk/source/Plugins/Language/ObjC/NSDictionary.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Language/ObjC/NSDictionary.cpp?rev=249587&r1=249586&r2=249587&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Language/ObjC/NSDictionary.cpp (original)
+++ lldb/trunk/source/Plugins/Language/ObjC/NSDictionary.cpp Wed Oct  7 13:36:53 2015
@@ -17,6 +17,7 @@
 #include "lldb/DataFormatters/FormattersHelpers.h"
 #include "lldb/Host/Endian.h"
 #include "lldb/Symbol/ClangASTContext.h"
+#include "lldb/Target/Language.h"
 #include "lldb/Target/ObjCLanguageRuntime.h"
 #include "lldb/Target/Target.h"
 
@@ -46,13 +47,13 @@ static CompilerType
 GetLLDBNSPairType (TargetSP target_sp)
 {
     CompilerType compiler_type;
-
+    
     ClangASTContext *target_ast_context = target_sp->GetScratchClangASTContext();
-
+    
     if (target_ast_context)
     {
         ConstString g___lldb_autogen_nspair("__lldb_autogen_nspair");
-
+        
         compiler_type = target_ast_context->GetTypeForIdentifier<clang::CXXRecordDecl>(g___lldb_autogen_nspair);
         
         if (!compiler_type)
@@ -213,6 +214,7 @@ template<bool name_entries>
 bool
 lldb_private::formatters::NSDictionarySummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options)
 {
+    static ConstString g_TypeHint("NSDictionary");
     ProcessSP process_sp = valobj.GetProcessSP();
     if (!process_sp)
         return false;
@@ -260,14 +262,14 @@ lldb_private::formatters::NSDictionarySu
         value &= (is_64bit ? ~0xFC00000000000000UL : ~0xFC000000U);
     }
     /*else if (!strcmp(class_name,"__NSCFDictionary"))
-    {
-        Error error;
-        value = process_sp->ReadUnsignedIntegerFromMemory(valobj_addr + (is_64bit ? 20 : 12), 4, 0, error);
-        if (error.Fail())
-            return false;
-        if (is_64bit)
-            value &= ~0x0f1f000000000000UL;
-    }*/
+     {
+     Error error;
+     value = process_sp->ReadUnsignedIntegerFromMemory(valobj_addr + (is_64bit ? 20 : 12), 4, 0, error);
+     if (error.Fail())
+     return false;
+     if (is_64bit)
+     value &= ~0x0f1f000000000000UL;
+     }*/
     else
     {
         auto& map(NSDictionary_Additionals::GetAdditionalSummaries());
@@ -278,11 +280,22 @@ lldb_private::formatters::NSDictionarySu
             return false;
     }
     
-    stream.Printf("%s%" PRIu64 " %s%s",
-                  (name_entries ? "@\"" : ""),
+    std::string prefix,suffix;
+    if (Language* language = Language::FindPlugin(options.GetLanguage()))
+    {
+        if (!language->GetFormatterPrefixSuffix(valobj, g_TypeHint, prefix, suffix))
+        {
+            prefix.clear();
+            suffix.clear();
+        }
+    }
+    
+    stream.Printf("%s%" PRIu64 " %s%s%s",
+                  prefix.c_str(),
                   value,
-                  (name_entries ? (value == 1 ? "entry" : "entries") : (value == 1 ? "key/value pair" : "key/value pairs")),
-                  (name_entries ? "\"" : ""));
+                  "key/value pair",
+                  value == 1 ? "" : "s",
+                  suffix.c_str());
     return true;
 }
 
@@ -295,7 +308,10 @@ SyntheticChildrenFrontEnd* lldb_private:
     if (!runtime)
         return NULL;
     
-    if (!valobj_sp->IsPointerType())
+    CompilerType valobj_type(valobj_sp->GetCompilerType());
+    Flags flags(valobj_type.GetTypeInfo());
+    
+    if (flags.IsClear(eTypeIsPointer))
     {
         Error error;
         valobj_sp = valobj_sp->AddressOf(error);
@@ -359,6 +375,8 @@ lldb_private::formatters::NSDictionaryCo
     lldb::ValueObjectSP child_sp;
     EvaluateExpressionOptions options;
     options.SetKeepInMemory(true);
+    options.SetLanguage(lldb::eLanguageTypeObjC_plus_plus);
+    options.SetResultIsInternal(true);
     m_backend.GetTargetSP()->EvaluateExpression(object_fetcher_expr.GetData(),
                                                 GetViableFrame(m_backend.GetTargetSP().get()),
                                                 child_sp,

Modified: lldb/trunk/source/Plugins/Language/ObjC/NSSet.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Language/ObjC/NSSet.cpp?rev=249587&r1=249586&r2=249587&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Language/ObjC/NSSet.cpp (original)
+++ lldb/trunk/source/Plugins/Language/ObjC/NSSet.cpp Wed Oct  7 13:36:53 2015
@@ -17,6 +17,7 @@
 #include "lldb/DataFormatters/FormattersHelpers.h"
 #include "lldb/Host/Endian.h"
 #include "lldb/Symbol/ClangASTContext.h"
+#include "lldb/Target/Language.h"
 #include "lldb/Target/ObjCLanguageRuntime.h"
 #include "lldb/Target/Target.h"
 
@@ -198,6 +199,8 @@ template<bool cf_style>
 bool
 lldb_private::formatters::NSSetSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options)
 {
+    static ConstString g_TypeHint("NSSet");
+    
     ProcessSP process_sp = valobj.GetProcessSP();
     if (!process_sp)
         return false;
@@ -245,26 +248,26 @@ lldb_private::formatters::NSSetSummaryPr
         value &= (is_64bit ? ~0xFC00000000000000UL : ~0xFC000000U);
     }
     /*else if (!strcmp(class_name,"__NSCFSet"))
-    {
-        Error error;
-        value = process_sp->ReadUnsignedIntegerFromMemory(valobj_addr + (is_64bit ? 20 : 12), 4, 0, error);
-        if (error.Fail())
-            return false;
-        if (is_64bit)
-            value &= ~0x1fff000000000000UL;
-    }
-    else if (!strcmp(class_name,"NSCountedSet"))
-    {
-        Error error;
-        value = process_sp->ReadUnsignedIntegerFromMemory(valobj_addr + ptr_size, ptr_size, 0, error);
-        if (error.Fail())
-            return false;
-        value = process_sp->ReadUnsignedIntegerFromMemory(value + (is_64bit ? 20 : 12), 4, 0, error);
-        if (error.Fail())
-            return false;
-        if (is_64bit)
-            value &= ~0x1fff000000000000UL;
-    }*/
+     {
+     Error error;
+     value = process_sp->ReadUnsignedIntegerFromMemory(valobj_addr + (is_64bit ? 20 : 12), 4, 0, error);
+     if (error.Fail())
+     return false;
+     if (is_64bit)
+     value &= ~0x1fff000000000000UL;
+     }
+     else if (!strcmp(class_name,"NSCountedSet"))
+     {
+     Error error;
+     value = process_sp->ReadUnsignedIntegerFromMemory(valobj_addr + ptr_size, ptr_size, 0, error);
+     if (error.Fail())
+     return false;
+     value = process_sp->ReadUnsignedIntegerFromMemory(value + (is_64bit ? 20 : 12), 4, 0, error);
+     if (error.Fail())
+     return false;
+     if (is_64bit)
+     value &= ~0x1fff000000000000UL;
+     }*/
     else
     {
         auto& map(NSSet_Additionals::GetAdditionalSummaries());
@@ -275,11 +278,22 @@ lldb_private::formatters::NSSetSummaryPr
             return false;
     }
     
-    stream.Printf("%s%" PRIu64 " %s%s",
-                  (cf_style ? "@\"" : ""),
+    std::string prefix,suffix;
+    if (Language* language = Language::FindPlugin(options.GetLanguage()))
+    {
+        if (!language->GetFormatterPrefixSuffix(valobj, g_TypeHint, prefix, suffix))
+        {
+            prefix.clear();
+            suffix.clear();
+        }
+    }
+    
+    stream.Printf("%s%" PRIu64 " %s%s%s",
+                  prefix.c_str(),
                   value,
-                  (cf_style ? (value == 1 ? "value" : "values") : (value == 1 ? "object" : "objects")),
-                  (cf_style ? "\"" : ""));
+                  "element",
+                  value == 1 ? "" : "s",
+                  suffix.c_str());
     return true;
 }
 
@@ -292,7 +306,10 @@ SyntheticChildrenFrontEnd* lldb_private:
     if (!runtime)
         return NULL;
     
-    if (!valobj_sp->IsPointerType())
+    CompilerType valobj_type(valobj_sp->GetCompilerType());
+    Flags flags(valobj_type.GetTypeInfo());
+    
+    if (flags.IsClear(eTypeIsPointer))
     {
         Error error;
         valobj_sp = valobj_sp->AddressOf(error);
@@ -492,10 +509,10 @@ lldb_private::formatters::NSSetISyntheti
                            process_sp->GetAddressByteSize());
         
         set_item.valobj_sp =
-            CreateValueObjectFromData(idx_name.GetData(),
-                                      data,
-                                      m_exe_ctx_ref,
-                                      m_backend.GetCompilerType().GetBasicTypeFromAST(lldb::eBasicTypeObjCID));
+        CreateValueObjectFromData(idx_name.GetData(),
+                                  data,
+                                  m_exe_ctx_ref,
+                                  m_backend.GetCompilerType().GetBasicTypeFromAST(lldb::eBasicTypeObjCID));
     }
     return set_item.valobj_sp;
 }
@@ -590,7 +607,7 @@ lldb::ValueObjectSP
 lldb_private::formatters::NSSetMSyntheticFrontEnd::GetChildAtIndex (size_t idx)
 {
     lldb::addr_t m_objs_addr = (m_data_32 ? m_data_32->_objs_addr : m_data_64->_objs_addr);
-
+    
     uint32_t num_children = CalculateNumChildren();
     
     if (idx >= num_children)
@@ -660,10 +677,10 @@ lldb_private::formatters::NSSetMSyntheti
                            process_sp->GetAddressByteSize());
         
         set_item.valobj_sp =
-            CreateValueObjectFromData(idx_name.GetData(),
-                                      data,
-                                      m_exe_ctx_ref,
-                                      m_backend.GetCompilerType().GetBasicTypeFromAST(lldb::eBasicTypeObjCID));
+        CreateValueObjectFromData(idx_name.GetData(),
+                                  data,
+                                  m_exe_ctx_ref,
+                                  m_backend.GetCompilerType().GetBasicTypeFromAST(lldb::eBasicTypeObjCID));
     }
     return set_item.valobj_sp;
 }
@@ -740,3 +757,4 @@ lldb_private::formatters::NSSetSummaryPr
 
 template bool
 lldb_private::formatters::NSSetSummaryProvider<false> (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options);
+

Modified: lldb/trunk/source/Plugins/Language/ObjC/NSString.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Language/ObjC/NSString.cpp?rev=249587&r1=249586&r2=249587&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Language/ObjC/NSString.cpp (original)
+++ lldb/trunk/source/Plugins/Language/ObjC/NSString.cpp Wed Oct  7 13:36:53 2015
@@ -18,6 +18,7 @@
 #include "lldb/DataFormatters/StringPrinter.h"
 #include "lldb/Host/Endian.h"
 #include "lldb/Symbol/ClangASTContext.h"
+#include "lldb/Target/Language.h"
 #include "lldb/Target/Target.h"
 #include "lldb/Utility/ProcessStructReader.h"
 
@@ -55,6 +56,8 @@ GetNSPathStore2Type (Target &target)
 bool
 lldb_private::formatters::NSStringSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& summary_options)
 {
+    static ConstString g_TypeHint("NSString");
+    
     ProcessSP process_sp = valobj.GetProcessSP();
     if (!process_sp)
         return false;
@@ -85,7 +88,7 @@ lldb_private::formatters::NSStringSummar
     bool is_tagged_ptr = (0 == strcmp(class_name,"NSTaggedPointerString")) && descriptor->GetTaggedPointerInfo();
     // for a tagged pointer, the descriptor has everything we need
     if (is_tagged_ptr)
-        return NSTaggedString_SummaryProvider(descriptor, stream);
+        return NSTaggedString_SummaryProvider(valobj, descriptor, stream, summary_options);
     
     auto& additionals_map(NSString_Additionals::GetAdditionalSummaries());
     auto iter = additionals_map.find(class_name_cs), end = additionals_map.end();
@@ -144,6 +147,20 @@ lldb_private::formatters::NSStringSummar
         return true;
     }
     
+    std::string prefix,suffix;
+    if (Language* language = Language::FindPlugin(summary_options.GetLanguage()))
+    {
+        if (!language->GetFormatterPrefixSuffix(valobj, g_TypeHint, prefix, suffix))
+        {
+            prefix.clear();
+            suffix.clear();
+        }
+    }
+    
+    StringPrinter::ReadStringAndDumpToStreamOptions options(valobj);
+    options.SetPrefixToken(prefix);
+    options.SetSuffixToken(suffix);
+    
     if (is_mutable)
     {
         uint64_t location = 2 * ptr_size + valobj_addr;
@@ -152,11 +169,9 @@ lldb_private::formatters::NSStringSummar
             return false;
         if (has_explicit_length && is_unicode)
         {
-            StringPrinter::ReadStringAndDumpToStreamOptions options(valobj);
             options.SetLocation(location);
             options.SetProcessSP(process_sp);
             options.SetStream(&stream);
-            options.SetPrefixToken("@");
             options.SetQuote('"');
             options.SetSourceSize(explicit_length);
             options.SetNeedsZeroTermination(false);
@@ -167,11 +182,9 @@ lldb_private::formatters::NSStringSummar
         }
         else
         {
-            StringPrinter::ReadStringAndDumpToStreamOptions options(valobj);
             options.SetLocation(location+1);
             options.SetProcessSP(process_sp);
             options.SetStream(&stream);
-            options.SetPrefixToken("@");
             options.SetSourceSize(explicit_length);
             options.SetNeedsZeroTermination(false);
             options.SetIgnoreMaxLength(summary_options.GetCapping() == TypeSummaryCapping::eTypeSummaryUncapped);
@@ -184,11 +197,9 @@ lldb_private::formatters::NSStringSummar
     {
         uint64_t location = 3 * ptr_size + valobj_addr;
         
-        StringPrinter::ReadStringAndDumpToStreamOptions options(valobj);
         options.SetLocation(location);
         options.SetProcessSP(process_sp);
         options.SetStream(&stream);
-        options.SetPrefixToken("@");
         options.SetQuote('"');
         options.SetSourceSize(explicit_length);
         options.SetIgnoreMaxLength(summary_options.GetCapping() == TypeSummaryCapping::eTypeSummaryUncapped);
@@ -214,11 +225,9 @@ lldb_private::formatters::NSStringSummar
             if (error.Fail())
                 return false;
         }
-        StringPrinter::ReadStringAndDumpToStreamOptions options(valobj);
         options.SetLocation(location);
         options.SetProcessSP(process_sp);
         options.SetStream(&stream);
-        options.SetPrefixToken("@");
         options.SetQuote('"');
         options.SetSourceSize(explicit_length);
         options.SetNeedsZeroTermination(has_explicit_length == false);
@@ -233,11 +242,9 @@ lldb_private::formatters::NSStringSummar
         explicit_length = reader.GetField<uint32_t>(ConstString("lengthAndRef")) >> 20;
         lldb::addr_t location = valobj.GetValueAsUnsigned(0) + ptr_size + 4;
         
-        StringPrinter::ReadStringAndDumpToStreamOptions options(valobj);
         options.SetLocation(location);
         options.SetProcessSP(process_sp);
         options.SetStream(&stream);
-        options.SetPrefixToken("@");
         options.SetQuote('"');
         options.SetSourceSize(explicit_length);
         options.SetNeedsZeroTermination(has_explicit_length == false);
@@ -261,11 +268,9 @@ lldb_private::formatters::NSStringSummar
                 has_explicit_length = true;
             location++;
         }
-        StringPrinter::ReadStringAndDumpToStreamOptions options(valobj);
         options.SetLocation(location);
         options.SetProcessSP(process_sp);
         options.SetStream(&stream);
-        options.SetPrefixToken("@");
         options.SetSourceSize(explicit_length);
         options.SetNeedsZeroTermination(!has_explicit_length);
         options.SetIgnoreMaxLength(summary_options.GetCapping() == TypeSummaryCapping::eTypeSummaryUncapped);
@@ -284,10 +289,8 @@ lldb_private::formatters::NSStringSummar
             return false;
         if (has_explicit_length && !has_null)
             explicit_length++; // account for the fact that there is no NULL and we need to have one added
-        StringPrinter::ReadStringAndDumpToStreamOptions options(valobj);
         options.SetLocation(location);
         options.SetProcessSP(process_sp);
-        options.SetPrefixToken("@");
         options.SetStream(&stream);
         options.SetSourceSize(explicit_length);
         options.SetIgnoreMaxLength(summary_options.GetCapping() == TypeSummaryCapping::eTypeSummaryUncapped);
@@ -331,8 +334,10 @@ lldb_private::formatters::NSMutableAttri
 }
 
 bool
-lldb_private::formatters::NSTaggedString_SummaryProvider (ObjCLanguageRuntime::ClassDescriptorSP descriptor, Stream& stream)
+lldb_private::formatters::NSTaggedString_SummaryProvider (ValueObject& valobj, ObjCLanguageRuntime::ClassDescriptorSP descriptor, Stream& stream, const TypeSummaryOptions& summary_options)
 {
+    static ConstString g_TypeHint("NSString");
+    
     if (!descriptor)
         return false;
     uint64_t len_bits = 0, data_bits = 0;
@@ -348,13 +353,25 @@ lldb_private::formatters::NSTaggedString
     if (len_bits > g_fiveBitMaxLen)
         return false;
     
+    std::string prefix,suffix;
+    if (Language* language = Language::FindPlugin(summary_options.GetLanguage()))
+    {
+        if (!language->GetFormatterPrefixSuffix(valobj, g_TypeHint, prefix, suffix))
+        {
+            prefix.clear();
+            suffix.clear();
+        }
+    }
+    
     // this is a fairly ugly trick - pretend that the numeric value is actually a char*
     // this works under a few assumptions:
     // little endian architecture
     // sizeof(uint64_t) > g_MaxNonBitmaskedLen
     if (len_bits <= g_MaxNonBitmaskedLen)
     {
-        stream.Printf("@\"%s\"",(const char*)&data_bits);
+        stream.Printf("%s",prefix.c_str());
+        stream.Printf("\"%s\"",(const char*)&data_bits);
+        stream.Printf("%s",suffix.c_str());
         return true;
     }
     
@@ -381,6 +398,8 @@ lldb_private::formatters::NSTaggedString
         bytes.insert(bytes.begin(), sixBitToCharLookup[packed]);
     }
     
-    stream.Printf("@\"%s\"",&bytes[0]);
+    stream.Printf("%s",prefix.c_str());
+    stream.Printf("\"%s\"",&bytes[0]);
+    stream.Printf("%s",suffix.c_str());
     return true;
 }

Modified: lldb/trunk/source/Plugins/Language/ObjC/NSString.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Language/ObjC/NSString.h?rev=249587&r1=249586&r2=249587&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Language/ObjC/NSString.h (original)
+++ lldb/trunk/source/Plugins/Language/ObjC/NSString.h Wed Oct  7 13:36:53 2015
@@ -22,7 +22,7 @@ namespace lldb_private {
         NSStringSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options);
         
         bool
-        NSTaggedString_SummaryProvider (ObjCLanguageRuntime::ClassDescriptorSP descriptor, Stream& stream);
+        NSTaggedString_SummaryProvider (ValueObject& valobj, ObjCLanguageRuntime::ClassDescriptorSP descriptor, Stream& stream, const TypeSummaryOptions& summary_options);
         
         bool
         NSAttributedStringSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options);

Modified: lldb/trunk/source/Plugins/Language/ObjC/ObjCLanguage.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Language/ObjC/ObjCLanguage.cpp?rev=249587&r1=249586&r2=249587&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Language/ObjC/ObjCLanguage.cpp (original)
+++ lldb/trunk/source/Plugins/Language/ObjC/ObjCLanguage.cpp Wed Oct  7 13:36:53 2015
@@ -770,3 +770,84 @@ ObjCLanguage::GetTypeScavenger ()
     
     return std::unique_ptr<TypeScavenger>(new ObjCTypeScavenger());
 }
+
+bool
+ObjCLanguage::GetFormatterPrefixSuffix (ValueObject& valobj, ConstString type_hint,
+                                        std::string& prefix, std::string& suffix)
+{
+    static ConstString g_CFBag("CFBag");
+    static ConstString g_CFBinaryHeap("CFBinaryHeap");
+    
+    static ConstString g_NSNumberChar("NSNumber:char");
+    static ConstString g_NSNumberShort("NSNumber:short");
+    static ConstString g_NSNumberInt("NSNumber:int");
+    static ConstString g_NSNumberLong("NSNumber:long");
+    static ConstString g_NSNumberFloat("NSNumber:float");
+    static ConstString g_NSNumberDouble("NSNumber:double");
+    
+    static ConstString g_NSData("NSData");
+    static ConstString g_NSArray("NSArray");
+    static ConstString g_NSString("NSString");
+    static ConstString g_NSStringStar("NSString*");
+    
+    if (type_hint.IsEmpty())
+        return false;
+    
+    prefix.clear();
+    suffix.clear();
+    
+    if (type_hint == g_CFBag ||
+        type_hint == g_CFBinaryHeap)
+    {
+        prefix = "@";
+        return true;
+    }
+    
+    if (type_hint == g_NSNumberChar)
+    {
+        prefix = "(char)";
+        return true;
+    }
+    if (type_hint == g_NSNumberShort)
+    {
+        prefix = "(short)";
+        return true;
+    }
+    if (type_hint == g_NSNumberInt)
+    {
+        prefix = "(int)";
+        return true;
+    }
+    if (type_hint == g_NSNumberLong)
+    {
+        prefix = "(long)";
+        return true;
+    }
+    if (type_hint == g_NSNumberFloat)
+    {
+        prefix = "(float)";
+        return true;
+    }
+    if (type_hint == g_NSNumberDouble)
+    {
+        prefix = "(double)";
+        return true;
+    }
+    
+    if (type_hint == g_NSData ||
+        type_hint == g_NSArray)
+    {
+        prefix = "@\"";
+        suffix = "\"";
+        return true;
+    }
+    
+    if (type_hint == g_NSString ||
+        type_hint == g_NSStringStar)
+    {
+        prefix = "@";
+        return true;
+    }
+    
+    return false;
+}

Modified: lldb/trunk/source/Plugins/Language/ObjC/ObjCLanguage.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Language/ObjC/ObjCLanguage.h?rev=249587&r1=249586&r2=249587&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Language/ObjC/ObjCLanguage.h (original)
+++ lldb/trunk/source/Plugins/Language/ObjC/ObjCLanguage.h Wed Oct  7 13:36:53 2015
@@ -149,6 +149,10 @@ public:
     std::unique_ptr<TypeScavenger>
     GetTypeScavenger () override;
     
+    bool
+    GetFormatterPrefixSuffix (ValueObject& valobj, ConstString type_hint,
+                              std::string& prefix, std::string& suffix) override;
+    
     //------------------------------------------------------------------
     // Static Functions
     //------------------------------------------------------------------

Modified: lldb/trunk/source/Target/Language.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/Language.cpp?rev=249587&r1=249586&r2=249587&view=diff
==============================================================================
--- lldb/trunk/source/Target/Language.cpp (original)
+++ lldb/trunk/source/Target/Language.cpp Wed Oct  7 13:36:53 2015
@@ -315,6 +315,13 @@ Language::TypeScavenger::Find (Execution
     return 0;
 }
 
+bool
+Language::GetFormatterPrefixSuffix (ValueObject& valobj, ConstString type_hint,
+                                    std::string& prefix, std::string& suffix)
+{
+    return false;
+}
+
 //----------------------------------------------------------------------
 // Constructor
 //----------------------------------------------------------------------

Modified: lldb/trunk/test/functionalities/data-formatter/data-formatter-objc/TestDataFormatterObjC.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/data-formatter-objc/TestDataFormatterObjC.py?rev=249587&r1=249586&r2=249587&view=diff
==============================================================================
--- lldb/trunk/test/functionalities/data-formatter/data-formatter-objc/TestDataFormatterObjC.py (original)
+++ lldb/trunk/test/functionalities/data-formatter/data-formatter-objc/TestDataFormatterObjC.py Wed Oct  7 13:36:53 2015
@@ -211,16 +211,16 @@ class ObjCDataFormatterTestCase(TestBase
 
     def nscontainers_data_formatter_commands(self):
         self.expect('frame variable newArray newDictionary newMutableDictionary cfdict_ref mutable_dict_ref cfarray_ref mutable_array_ref',
-                    substrs = ['(NSArray *) newArray = ','@"50 objects"',
+                    substrs = ['(NSArray *) newArray = ','@"50 elements"',
                     '(NSDictionary *) newDictionary = ',' 12 key/value pairs',
                     '(NSDictionary *) newMutableDictionary = ',' 21 key/value pairs',
-                    '(CFDictionaryRef) cfdict_ref = ','@"3 entries"',
-                    '(CFMutableDictionaryRef) mutable_dict_ref = ','@"12 entries"',
-                    '(CFArrayRef) cfarray_ref = ','@"3 objects"',
-                    '(CFMutableArrayRef) mutable_array_ref = ','@"11 objects"'])
+                    '(CFDictionaryRef) cfdict_ref = ','3 key/value pairs',
+                    '(CFMutableDictionaryRef) mutable_dict_ref = ','12 key/value pairs',
+                    '(CFArrayRef) cfarray_ref = ','@"3 elements"',
+                    '(CFMutableArrayRef) mutable_array_ref = ','@"11 elements"'])
 
         self.expect('frame variable nscounted_set',
-                    substrs = ['(NSCountedSet *) nscounted_set = ','5 objects'])
+                    substrs = ['(NSCountedSet *) nscounted_set = ','5 elements'])
 
         self.expect('frame variable iset1 iset2 imset',
                     substrs = ['4 indexes','512 indexes','10 indexes'])

Modified: lldb/trunk/test/functionalities/data-formatter/data-formatter-proper-plurals/TestFormattersOneIsSingular.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/data-formatter-proper-plurals/TestFormattersOneIsSingular.py?rev=249587&r1=249586&r2=249587&view=diff
==============================================================================
--- lldb/trunk/test/functionalities/data-formatter/data-formatter-proper-plurals/TestFormattersOneIsSingular.py (original)
+++ lldb/trunk/test/functionalities/data-formatter/data-formatter-proper-plurals/TestFormattersOneIsSingular.py Wed Oct  7 13:36:53 2015
@@ -50,13 +50,13 @@ class DataFormatterOneIsSingularTestCase
 
         # Now check that we are displaying Cocoa classes correctly
         self.expect('frame variable key',
-                    substrs = ['@"1 object"'])
+                    substrs = ['@"1 element"'])
         self.expect('frame variable key', matching=False,
-                    substrs = ['1 objects'])
+                    substrs = ['1 elements'])
         self.expect('frame variable value',
-                    substrs = ['@"1 object"'])
+                    substrs = ['@"1 element"'])
         self.expect('frame variable value', matching=False,
-                    substrs = ['1 objects'])
+                    substrs = ['1 elements'])
         self.expect('frame variable dict',
                     substrs = ['1 key/value pair'])
         self.expect('frame variable dict', matching=False,
@@ -66,9 +66,9 @@ class DataFormatterOneIsSingularTestCase
         self.expect('frame variable mutable_bag_ref', matching=False,
                     substrs = ['1 values'])
         self.expect('frame variable nscounted_set',
-                    substrs = ['1 object'])
+                    substrs = ['1 element'])
         self.expect('frame variable nscounted_set', matching=False,
-                    substrs = ['1 objects'])
+                    substrs = ['1 elements'])
         self.expect('frame variable imset',
                     substrs = ['1 index'])
         self.expect('frame variable imset', matching=False,
@@ -78,9 +78,9 @@ class DataFormatterOneIsSingularTestCase
         self.expect('frame variable binheap_ref', matching=False,
                     substrs = ['1 items'])
         self.expect('frame variable nsset',
-                    substrs = ['1 object'])
+                    substrs = ['1 element'])
         self.expect('frame variable nsset', matching=False,
-                    substrs = ['1 objects'])
+                    substrs = ['1 elements'])
         self.expect('frame variable immutableData',
                     substrs = ['1 byte'])
         self.expect('frame variable immutableData', matching=False,

Modified: lldb/trunk/test/functionalities/data-formatter/nsarraysynth/TestNSArraySynthetic.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/nsarraysynth/TestNSArraySynthetic.py?rev=249587&r1=249586&r2=249587&view=diff
==============================================================================
--- lldb/trunk/test/functionalities/data-formatter/nsarraysynth/TestNSArraySynthetic.py (original)
+++ lldb/trunk/test/functionalities/data-formatter/nsarraysynth/TestNSArraySynthetic.py Wed Oct  7 13:36:53 2015
@@ -46,19 +46,19 @@ class NSArraySyntheticTestCase(TestBase)
 
         # Now check that we are displaying Cocoa classes correctly
         self.expect('frame variable arr',
-                    substrs = ['@"6 objects"'])
+                    substrs = ['@"6 elements"'])
         self.expect('frame variable other_arr',
-                    substrs = ['@"4 objects"'])
+                    substrs = ['@"4 elements"'])
         self.expect('frame variable arr --ptr-depth 1',
-                    substrs = ['@"6 objects"','[0] = 0x','[1] = 0x','[2] = 0x','[3] = 0x','[4] = 0x','[5] = 0x'])
+                    substrs = ['@"6 elements"','[0] = 0x','[1] = 0x','[2] = 0x','[3] = 0x','[4] = 0x','[5] = 0x'])
         self.expect('frame variable other_arr --ptr-depth 1',
-                    substrs = ['@"4 objects"','[0] = 0x','[1] = 0x','[2] = 0x','[3] = 0x'])
+                    substrs = ['@"4 elements"','[0] = 0x','[1] = 0x','[2] = 0x','[3] = 0x'])
         self.expect('frame variable arr --ptr-depth 1 -d no-run-target',
-                    substrs = ['@"6 objects"','@"hello"','@"world"','@"this"','@"is"','@"me"','@"http://www.apple.com'])
+                    substrs = ['@"6 elements"','@"hello"','@"world"','@"this"','@"is"','@"me"','@"http://www.apple.com'])
         self.expect('frame variable other_arr --ptr-depth 1 -d no-run-target',
-                    substrs = ['@"4 objects"','(int)5','@"a string"','@"6 objects"'])
+                    substrs = ['@"4 elements"','(int)5','@"a string"','@"6 elements"'])
         self.expect('frame variable other_arr --ptr-depth 2 -d no-run-target',
-                    substrs = ['@"4 objects"','@"6 objects" {','@"hello"','@"world"','@"this"','@"is"','@"me"','@"http://www.apple.com'])
+                    substrs = ['@"4 elements"','@"6 elements" {','@"hello"','@"world"','@"this"','@"is"','@"me"','@"http://www.apple.com'])
 
         self.assertTrue(self.frame().FindVariable("arr").MightHaveChildren(), "arr says it does not have children!")
         self.assertTrue(self.frame().FindVariable("other_arr").MightHaveChildren(), "arr says it does not have children!")

Modified: lldb/trunk/test/functionalities/data-formatter/nsdictionarysynth/TestNSDictionarySynthetic.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/nsdictionarysynth/TestNSDictionarySynthetic.py?rev=249587&r1=249586&r2=249587&view=diff
==============================================================================
--- lldb/trunk/test/functionalities/data-formatter/nsdictionarysynth/TestNSDictionarySynthetic.py (original)
+++ lldb/trunk/test/functionalities/data-formatter/nsdictionarysynth/TestNSDictionarySynthetic.py Wed Oct  7 13:36:53 2015
@@ -54,13 +54,13 @@ class NSDictionarySyntheticTestCase(Test
         self.expect('frame variable mutabledict --ptr-depth 1',
                     substrs = ['4 key/value pairs','[0] = ','key = 0x','value = 0x','[1] = ','[2] = ','[3] = '])
         self.expect('frame variable dictionary --ptr-depth 1 --dynamic-type no-run-target',
-                    substrs = ['3 key/value pairs','@"bar"','@"2 objects"','@"baz"','2 key/value pairs'])
+                    substrs = ['3 key/value pairs','@"bar"','@"2 elements"','@"baz"','2 key/value pairs'])
         self.expect('frame variable mutabledict --ptr-depth 1 --dynamic-type no-run-target',
-                    substrs = ['4 key/value pairs','(int)23','@"123"','@"http://www.apple.com"','@"puartist"','3 key/value pairs'])
+                    substrs = ['4 key/value pairs','(int)23','@"123"','@"http://www.apple.com"','@"sourceofstuff"','3 key/value pairs'])
         self.expect('frame variable mutabledict --ptr-depth 2 --dynamic-type no-run-target',
-        substrs = ['4 key/value pairs','(int)23','@"123"','@"http://www.apple.com"','@"puartist"','3 key/value pairs','@"bar"','@"2 objects"'])
+        substrs = ['4 key/value pairs','(int)23','@"123"','@"http://www.apple.com"','@"sourceofstuff"','3 key/value pairs','@"bar"','@"2 elements"'])
         self.expect('frame variable mutabledict --ptr-depth 3 --dynamic-type no-run-target',
-        substrs = ['4 key/value pairs','(int)23','@"123"','@"http://www.apple.com"','@"puartist"','3 key/value pairs','@"bar"','@"2 objects"','(int)1','@"two"'])
+        substrs = ['4 key/value pairs','(int)23','@"123"','@"http://www.apple.com"','@"sourceofstuff"','3 key/value pairs','@"bar"','@"2 elements"','(int)1','@"two"'])
 
         self.assertTrue(self.frame().FindVariable("dictionary").MightHaveChildren(), "dictionary says it does not have children!")
         self.assertTrue(self.frame().FindVariable("mutabledict").MightHaveChildren(), "mutable says it does not have children!")

Modified: lldb/trunk/test/functionalities/data-formatter/nsdictionarysynth/main.m
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/nsdictionarysynth/main.m?rev=249587&r1=249586&r2=249587&view=diff
==============================================================================
--- lldb/trunk/test/functionalities/data-formatter/nsdictionarysynth/main.m (original)
+++ lldb/trunk/test/functionalities/data-formatter/nsdictionarysynth/main.m Wed Oct  7 13:36:53 2015
@@ -22,7 +22,7 @@ int main (int argc, const char * argv[])
 	[mutabledict setObject:@"123" forKey:@23];
 	[mutabledict setObject:[NSURL URLWithString:@"http://www.apple.com"] forKey:@"foobar"];
 	[mutabledict setObject:@[@"a", at 12] forKey:@57];
-	[mutabledict setObject:dictionary forKey:@"puartist"];
+	[mutabledict setObject:dictionary forKey:@"sourceofstuff"];
 
     [pool drain];// Set break point at this line.
     return 0;

Modified: lldb/trunk/test/functionalities/data-formatter/nssetsynth/TestNSSetSynthetic.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/nssetsynth/TestNSSetSynthetic.py?rev=249587&r1=249586&r2=249587&view=diff
==============================================================================
--- lldb/trunk/test/functionalities/data-formatter/nssetsynth/TestNSSetSynthetic.py (original)
+++ lldb/trunk/test/functionalities/data-formatter/nssetsynth/TestNSSetSynthetic.py Wed Oct  7 13:36:53 2015
@@ -46,29 +46,29 @@ class NSSetSyntheticTestCase(TestBase):
 
         # Now check that we are displaying Cocoa classes correctly
         self.expect('frame variable set',
-                    substrs = ['4 objects'])
+                    substrs = ['4 elements'])
         self.expect('frame variable mutable',
-                    substrs = ['9 objects'])
+                    substrs = ['9 elements'])
         self.expect('frame variable set --ptr-depth 1 -d run -T',
-                    substrs = ['4 objects','[0]','[1]','[2]','[3]','hello','world','(int)1','(int)2'])
+                    substrs = ['4 elements','[0]','[1]','[2]','[3]','hello','world','(int)1','(int)2'])
         self.expect('frame variable mutable --ptr-depth 1 -d run -T',
-                    substrs = ['9 objects','(int)5','@"3 objects"','@"www.apple.com"','(int)3','@"world"','(int)4'])
+                    substrs = ['9 elements','(int)5','@"3 elements"','@"www.apple.com"','(int)3','@"world"','(int)4'])
 
         self.runCmd("next")
         self.expect('frame variable mutable',
-                    substrs = ['0 objects'])
+                    substrs = ['0 elements'])
 
         self.runCmd("next")
         self.expect('frame variable mutable',
-                    substrs = ['4 objects'])
+                    substrs = ['4 elements'])
         self.expect('frame variable mutable --ptr-depth 1 -d run -T',
-                    substrs = ['4 objects','[0]','[1]','[2]','[3]','hello','world','(int)1','(int)2'])
+                    substrs = ['4 elements','[0]','[1]','[2]','[3]','hello','world','(int)1','(int)2'])
 
         self.runCmd("next")
         self.expect('frame variable mutable',
-                    substrs = ['4 objects'])
+                    substrs = ['4 elements'])
         self.expect('frame variable mutable --ptr-depth 1 -d run -T',
-                    substrs = ['4 objects','[0]','[1]','[2]','[3]','hello','world','(int)1','(int)2'])
+                    substrs = ['4 elements','[0]','[1]','[2]','[3]','hello','world','(int)1','(int)2'])
 
 if __name__ == '__main__':
     import atexit

Modified: lldb/trunk/test/functionalities/data-formatter/synthupdate/TestSyntheticFilterRecompute.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/synthupdate/TestSyntheticFilterRecompute.py?rev=249587&r1=249586&r2=249587&view=diff
==============================================================================
--- lldb/trunk/test/functionalities/data-formatter/synthupdate/TestSyntheticFilterRecompute.py (original)
+++ lldb/trunk/test/functionalities/data-formatter/synthupdate/TestSyntheticFilterRecompute.py Wed Oct  7 13:36:53 2015
@@ -52,7 +52,7 @@ class SyntheticFilterRecomputingTestCase
         if self.TraceOn():
             self.runCmd("expr --dynamic-type run-target --ptr-depth 1 -- x")
 
-        self.assertTrue(id_x.GetSummary() == '@"5 objects"', "array does not get correct summary")
+        self.assertTrue(id_x.GetSummary() == '@"5 elements"', "array does not get correct summary")
 
         self.runCmd("next")
         self.runCmd("frame select 0")




More information about the lldb-commits mailing list