This commit:
a) adds a Python summary provider for NSDate
b) changes the initialization for ScriptInterpreter so that we are not passing a bulk of Python-specific function pointers around
c) provides a new ScriptInterpreterObject class that allows for ref-count safe wrapping of scripting objects on the C++ side
d) contains much needed performance improvements:
1) the pointer to the Python function generating a scripted summary is now cached instead of looked up every time
2) redundant memory reads in the Python ObjC runtime wrapper are eliminated
3) summaries now use the m_summary_str in ValueObject to store their data instead of passing around ( == copying) an std::string object
e) contains other minor fixes, such as adding descriptive error messages for some cases of summary generation failure
llvm-svn: 151703
diff --git a/lldb/examples/summaries/cocoa/CFString.py b/lldb/examples/summaries/cocoa/CFString.py
index 478f972..13d825e 100644
--- a/lldb/examples/summaries/cocoa/CFString.py
+++ b/lldb/examples/summaries/cocoa/CFString.py
@@ -76,7 +76,7 @@
# handle the special case strings
# only use the custom code for the tested LP64 case
def handle_special(self):
- if self.lp64 == False:
+ if self.is_64_bit == False:
# for 32bit targets, use safe ObjC code
return self.handle_unicode_string_safe()
offset = 12
@@ -127,7 +127,7 @@
"(char*)\"" + pystr.encode('utf-8') + "\"")
def handle_inline_explicit(self):
- if self.lp64:
+ if self.is_64_bit:
offset = 24
else:
offset = 12
@@ -136,7 +136,7 @@
"(char*)(" + str(offset) + ")")
def handle_mutable_string(self):
- if self.lp64:
+ if self.is_64_bit:
offset = 16
else:
offset = 8
@@ -223,7 +223,7 @@
# to get its size we add up sizeof(pointer)+4
# and then add 4 more bytes if we are on a 64bit system
def size_of_cfruntime_base(self):
- if self.lp64 == True:
+ if self.is_64_bit == True:
return 8+4+4;
else:
return 4+4;
@@ -234,7 +234,7 @@
# on big-endian this means going to byte 3, if we are on
# little endian (OSX & iOS), this means reading byte 0
def offset_of_info_bits(self):
- if self.lp64 == True:
+ if self.is_64_bit == True:
offset = 8;
else:
offset = 4;
@@ -282,7 +282,7 @@
# preparing ourselves to read into memory
# by adjusting architecture-specific info
def adjust_for_architecture(self):
- self.lp64 = self.is_64bit();
+ self.is_64_bit = self.is_64bit();
self.is_little = self.is_little_endian();
# reading info bits out of the CFString and computing