diff options
| -rw-r--r-- | lldb/scripts/Python/modify-python-lldb.py | 8 | ||||
| -rw-r--r-- | lldb/test/python_api/lldbutil/iter/TestRegistersIterator.py | 42 |
2 files changed, 38 insertions, 12 deletions
diff --git a/lldb/scripts/Python/modify-python-lldb.py b/lldb/scripts/Python/modify-python-lldb.py index 2a73e6788dd..da395c5c623 100644 --- a/lldb/scripts/Python/modify-python-lldb.py +++ b/lldb/scripts/Python/modify-python-lldb.py @@ -41,6 +41,11 @@ iter_def = " def __iter__(self): return lldb_iter(self, '%s', '%s')" module_iter = " def module_iter(self): return lldb_iter(self, '%s', '%s')" breakpoint_iter = " def breakpoint_iter(self): return lldb_iter(self, '%s', '%s')" # +# Called to implement the built-in function len(). +# Eligible objects are those containers with unambiguous iteration support. +# +len_def = " def __len__(self): return self.%s()" +# # This supports the rich comparison methods of __eq__ and __ne__. eq_def = " def __eq__(self, other): return isinstance(other, %s) and %s" ne_def = " def __ne__(self, other): return not self.__eq__(other)" @@ -104,7 +109,7 @@ class_pattern = re.compile("^class (SB.*)\(_object\):$") # The pattern for recognizing the beginning of the __init__ method definition. init_pattern = re.compile("^ def __init__\(self, \*args\):") -# These define the states of our state machine. +# These define the states of our finite state machine. NORMAL = 0 DEFINING_ITERATOR = 1 DEFINING_EQUALITY = 2 @@ -140,6 +145,7 @@ for line in content.splitlines(): else: if (state & DEFINING_ITERATOR): print >> new_content, iter_def % d[cls] + print >> new_content, len_def % d[cls][0] if (state & DEFINING_EQUALITY): print >> new_content, eq_def % (cls, list_to_frag(e[cls])) print >> new_content, ne_def diff --git a/lldb/test/python_api/lldbutil/iter/TestRegistersIterator.py b/lldb/test/python_api/lldbutil/iter/TestRegistersIterator.py index bd20b7e7e05..2fffd27770d 100644 --- a/lldb/test/python_api/lldbutil/iter/TestRegistersIterator.py +++ b/lldb/test/python_api/lldbutil/iter/TestRegistersIterator.py @@ -43,25 +43,45 @@ class RegistersIteratorTestCase(TestBase): for thread in self.process: if thread.GetStopReason() == lldb.eStopReasonBreakpoint: for frame in thread: - # Dump the registers of this frame using iter_registers(). + # Dump the registers of this frame using lldbutil.get_GPRs() and friends. if self.TraceOn(): print frame + REGs = lldbutil.get_GPRs(frame) + num = len(REGs) + if self.TraceOn(): + print "\nNumber of general purpose registers: %d" % num + for reg in REGs: + self.assertTrue(reg.IsValid()) + if self.TraceOn(): + print "%s => %s" % (reg.GetName(), reg.GetValue(frame)) + + REGs = lldbutil.get_FPRs(frame) + num = len(REGs) + if self.TraceOn(): + print "\nNumber of floating point registers: %d" % num + for reg in REGs: + self.assertTrue(reg.IsValid()) + if self.TraceOn(): + print "%s => %s" % (reg.GetName(), reg.GetValue(frame)) + + REGs = lldbutil.get_ESRs(frame) + num = len(REGs) + if self.TraceOn(): + print "\nNumber of exception state registers: %d" % num + for reg in REGs: + self.assertTrue(reg.IsValid()) + if self.TraceOn(): + print "%s => %s" % (reg.GetName(), reg.GetValue(frame)) + + # And these should also work. for kind in ["General Purpose Registers", "Floating Point Registers", "Exception State Registers"]: REGs = lldbutil.get_registers(frame, kind) - if self.TraceOn(): - print "%s:" % kind - for reg in REGs: - self.assertTrue(reg.IsValid()) - if self.TraceOn(): - print "%s => %s" % (reg.GetName(), reg.GetValue(frame)) + self.assertTrue(REGs.IsValid()) - # And these should also work. - self.assertTrue(lldbutil.get_GPRs(frame)) - self.assertTrue(lldbutil.get_FPRs(frame)) - self.assertTrue(lldbutil.get_ESRs(frame)) + # We've finished dumping the registers for frame #0. break |

