Changed several of the Cocoa formatters to match the output style that Xcode uses internally to provide summaries
This has been done for those summaries where the difference is only cosmetic (e.g. naming things as items instead of values, ...)
The LLDB output style has been preserved when it provides more information (e.g. telling the type as well as the value of an NSNumber)
Test cases have been updated to reflect the updated output style where necessary
llvm-svn: 152592
diff --git a/lldb/examples/summaries/cocoa/CFArray.py b/lldb/examples/summaries/cocoa/CFArray.py
index 1a78f5a..608efea 100644
--- a/lldb/examples/summaries/cocoa/CFArray.py
+++ b/lldb/examples/summaries/cocoa/CFArray.py
@@ -166,7 +166,8 @@
if summary == None:
summary = 'no valid array here'
else:
- summary = str(summary) + (" objects" if summary > 1 else " object")
+ # we format it like it were a CFString to make it look the same as the summary from Xcode
+ summary = '@"' + str(summary) + (" objects" if summary > 1 else " object") + '"'
return summary
return ''
diff --git a/lldb/examples/summaries/cocoa/CFBag.py b/lldb/examples/summaries/cocoa/CFBag.py
index 2e41de6..e0cfd3d 100644
--- a/lldb/examples/summaries/cocoa/CFBag.py
+++ b/lldb/examples/summaries/cocoa/CFBag.py
@@ -120,9 +120,9 @@
if provider.sys_params.is_64_bit:
summary = summary & ~0x1fff000000000000
if summary == 1:
- summary = '1 item'
+ summary = '@"1 value"'
else:
- summary = str(summary) + ' items'
+ summary = '@"' + str(summary) + ' values"'
return summary
return ''
diff --git a/lldb/examples/summaries/cocoa/CFBinaryHeap.py b/lldb/examples/summaries/cocoa/CFBinaryHeap.py
index d13ee87..60f42d3 100644
--- a/lldb/examples/summaries/cocoa/CFBinaryHeap.py
+++ b/lldb/examples/summaries/cocoa/CFBinaryHeap.py
@@ -114,9 +114,9 @@
if provider.sys_params.is_64_bit:
summary = summary & ~0x1fff000000000000
if summary == 1:
- return '1 item'
+ return '@"1 item"'
else:
- summary = str(summary) + ' items'
+ summary = '@"' + str(summary) + ' items"'
return summary
return ''
diff --git a/lldb/examples/summaries/cocoa/CFDictionary.py b/lldb/examples/summaries/cocoa/CFDictionary.py
index 3f90de2..39b7ac8 100644
--- a/lldb/examples/summaries/cocoa/CFDictionary.py
+++ b/lldb/examples/summaries/cocoa/CFDictionary.py
@@ -197,7 +197,7 @@
# needed on OSX Mountain Lion
if provider.sys_params.is_64_bit:
summary = summary & ~0x0f1f000000000000
- summary = str(summary) + (" key/value pairs" if summary > 1 else " key/value pair")
+ summary = '@"' + str(summary) + (' entries"' if summary > 1 else ' entry"')
return summary
return ''
diff --git a/lldb/examples/summaries/cocoa/NSData.py b/lldb/examples/summaries/cocoa/NSData.py
index f1f50fb..d2d2515 100644
--- a/lldb/examples/summaries/cocoa/NSData.py
+++ b/lldb/examples/summaries/cocoa/NSData.py
@@ -111,5 +111,23 @@
return summary
return ''
+def NSData_SummaryProvider2 (valobj,dict):
+ provider = GetSummary_Impl(valobj);
+ if provider != None:
+ try:
+ summary = provider.length();
+ except:
+ summary = None
+ if summary == None:
+ summary = 'no valid data here'
+ else:
+ if summary == 1:
+ summary = '@"1 byte"'
+ else:
+ summary = '@"' + str(summary) + ' bytes"'
+ return summary
+ return ''
+
def __lldb_init_module(debugger,dict):
- debugger.HandleCommand("type summary add -F NSData.NSData_SummaryProvider NSData CFDataRef CFMutableDataRef")
+ debugger.HandleCommand("type summary add -F NSData.NSData_SummaryProvider NSData")
+ debugger.HandleCommand("type summary add -F NSData.NSData_SummaryProvider2 CFDataRef CFMutableDataRef")
diff --git a/lldb/examples/summaries/cocoa/NSDate.py b/lldb/examples/summaries/cocoa/NSDate.py
index 3f0273f..b3c3039 100644
--- a/lldb/examples/summaries/cocoa/NSDate.py
+++ b/lldb/examples/summaries/cocoa/NSDate.py
@@ -31,6 +31,13 @@
else:
return osx - osx_epoch
+# represent a struct_time as a string in the format used by Xcode
+def xcode_format_time(X):
+ return time.strftime('%Y-%m-%d %H:%M:%S %Z',X)
+
+# represent a count-since-epoch as a string in the format used by Xcode
+def xcode_format_count(X):
+ return xcode_format_time(time.localtime(X))
# despite the similary to synthetic children providers, these classes are not
# trying to provide anything but the summary for NSDate, so they need not
@@ -56,7 +63,7 @@
# while all Python knows about is the "epoch", which is a platform-dependent
# year (1970 of *nix) whose Jan 1 at midnight is taken as reference
value_double = struct.unpack('d', struct.pack('Q', self.data))[0]
- return time.ctime(osx_to_python_time(value_double))
+ return xcode_format_count(osx_to_python_time(value_double))
class NSUntaggedDate_SummaryProvider:
@@ -81,7 +88,7 @@
self.offset(),
self.sys_params.types_cache.double)
value_double = struct.unpack('d', struct.pack('Q', value.GetValueAsUnsigned(0)))[0]
- return time.ctime(osx_to_python_time(value_double))
+ return xcode_format_count(osx_to_python_time(value_double))
class NSCalendarDate_SummaryProvider:
def adjust_for_architecture(self):
@@ -105,7 +112,7 @@
self.offset(),
self.sys_params.types_cache.double)
value_double = struct.unpack('d', struct.pack('Q', value.GetValueAsUnsigned(0)))[0]
- return time.ctime(osx_to_python_time(value_double))
+ return xcode_format_count(osx_to_python_time(value_double))
class NSTimeZoneClass_SummaryProvider:
def adjust_for_architecture(self):
@@ -215,7 +222,7 @@
def CFAbsoluteTime_SummaryProvider (valobj,dict):
try:
value_double = struct.unpack('d', struct.pack('Q', valobj.GetValueAsUnsigned(0)))[0]
- return time.ctime(osx_to_python_time(value_double))
+ return xcode_format_count(osx_to_python_time(value_double))
except:
return 'unable to provide a summary'
diff --git a/lldb/examples/summaries/cocoa/NSException.py b/lldb/examples/summaries/cocoa/NSException.py
index 3a09198..0d2d9a7 100644
--- a/lldb/examples/summaries/cocoa/NSException.py
+++ b/lldb/examples/summaries/cocoa/NSException.py
@@ -36,7 +36,7 @@
reason_ptr = self.valobj.CreateChildAtOffset("reason",
self.offset_reason(),
self.sys_params.types_cache.id)
- return CFString.CFString_SummaryProvider(name_ptr,None) + " " + CFString.CFString_SummaryProvider(reason_ptr,None)
+ return 'name:' + CFString.CFString_SummaryProvider(name_ptr,None) + ' reason:' + CFString.CFString_SummaryProvider(reason_ptr,None)
class NSUnknownException_SummaryProvider:
def adjust_for_architecture(self):
diff --git a/lldb/examples/summaries/cocoa/NSSet.py b/lldb/examples/summaries/cocoa/NSSet.py
index 4abf703..ea410cf 100644
--- a/lldb/examples/summaries/cocoa/NSSet.py
+++ b/lldb/examples/summaries/cocoa/NSSet.py
@@ -225,7 +225,7 @@
else:
if provider.sys_params.is_64_bit:
summary = summary & ~0x1fff000000000000
- summary = str(summary) + (' objects' if summary > 1 else ' object')
+ summary = '@"' + str(summary) + (' values"' if summary > 1 else ' value"')
return summary
return ''
diff --git a/lldb/examples/summaries/cocoa/NSURL.py b/lldb/examples/summaries/cocoa/NSURL.py
index 4273b43..d29bbc7 100644
--- a/lldb/examples/summaries/cocoa/NSURL.py
+++ b/lldb/examples/summaries/cocoa/NSURL.py
@@ -47,8 +47,15 @@
self.offset_base(),
self.sys_params.types_cache.NSURL)
my_string = CFString.CFString_SummaryProvider(text,None)
- if base.GetValueAsUnsigned(0) != 0:
- my_string = my_string + " (base path: " + NSURL_SummaryProvider(base,None) + ")"
+ if len(my_string) > 0 and base.GetValueAsUnsigned(0) != 0:
+ # remove final " from myself
+ my_string = my_string[0:len(my_string)-1]
+ my_string = my_string + ' -- '
+ my_base_string = NSURL_SummaryProvider(base,None)
+ if len(my_base_string) > 2:
+ # remove @" marker from base URL string
+ my_base_string = my_base_string[2:]
+ my_string = my_string + my_base_string
return my_string