summaryrefslogtreecommitdiffstats
path: root/lldb/scripts
diff options
context:
space:
mode:
authorPavel Labath <pavel@labath.sk>2019-04-03 11:48:38 +0000
committerPavel Labath <pavel@labath.sk>2019-04-03 11:48:38 +0000
commit4da5a1dbab579da5975de573719c50fd3c1faeab (patch)
treeebf2ba238469a703f9ab0aef2f3cb4c98b9f1d21 /lldb/scripts
parent02599de2e1e9688ed74e2d1080c4e4f73c6072af (diff)
downloadbcm5719-llvm-4da5a1dbab579da5975de573719c50fd3c1faeab.tar.gz
bcm5719-llvm-4da5a1dbab579da5975de573719c50fd3c1faeab.zip
modify-python-lldb.py: clean up __iter__ and __len__ support
Summary: Instead of modifying the swig-generated code, just add the appropriate methods to the interface files in order to get the swig to do the generation for us. This is a straight-forward move from the python script to the interface files. The single class which has nontrivial handling in the script (SBModule) has been left for a separate patch. For the cases where I did not find any tests exercising the iteration/length methods (i.e., no tests failed after I stopped emitting them), I tried to add basic tests for that functionality. Reviewers: zturner, jingham, amccarth Subscribers: jdoerfert, lldb-commits Differential Revision: https://reviews.llvm.org/D60119 llvm-svn: 357572
Diffstat (limited to 'lldb/scripts')
-rw-r--r--lldb/scripts/Python/modify-python-lldb.py39
-rw-r--r--lldb/scripts/interface/SBBreakpoint.i12
-rw-r--r--lldb/scripts/interface/SBCompileUnit.i9
-rw-r--r--lldb/scripts/interface/SBDebugger.i11
-rw-r--r--lldb/scripts/interface/SBInstructionList.i5
-rw-r--r--lldb/scripts/interface/SBProcess.i9
-rw-r--r--lldb/scripts/interface/SBSection.i8
-rw-r--r--lldb/scripts/interface/SBStringList.i10
-rw-r--r--lldb/scripts/interface/SBSymbolContextList.i5
-rw-r--r--lldb/scripts/interface/SBTarget.i15
-rw-r--r--lldb/scripts/interface/SBThread.i8
-rw-r--r--lldb/scripts/interface/SBType.i10
-rw-r--r--lldb/scripts/interface/SBValue.i8
-rw-r--r--lldb/scripts/interface/SBValueList.i4
14 files changed, 117 insertions, 36 deletions
diff --git a/lldb/scripts/Python/modify-python-lldb.py b/lldb/scripts/Python/modify-python-lldb.py
index af51ae6a85d..1e2784bc262 100644
--- a/lldb/scripts/Python/modify-python-lldb.py
+++ b/lldb/scripts/Python/modify-python-lldb.py
@@ -77,9 +77,6 @@ one_liner_docstring_pattern = re.compile(
# This supports the iteration protocol.
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')"
-watchpoint_iter = " def watchpoint_iter(self): return lldb_iter(self, '%s', '%s')"
section_iter = " def section_iter(self): return lldb_iter(self, '%s', '%s')"
compile_unit_iter = " def compile_unit_iter(self): return lldb_iter(self, '%s', '%s')"
@@ -100,28 +97,7 @@ symbol_in_section_iter_def = '''
#
# This dictionary defines a mapping from classname to (getsize, getelem) tuple.
#
-d = {'SBBreakpoint': ('GetNumLocations', 'GetLocationAtIndex'),
- 'SBCompileUnit': ('GetNumLineEntries', 'GetLineEntryAtIndex'),
- 'SBDebugger': ('GetNumTargets', 'GetTargetAtIndex'),
- 'SBModule': ('GetNumSymbols', 'GetSymbolAtIndex'),
- 'SBProcess': ('GetNumThreads', 'GetThreadAtIndex'),
- 'SBSection': ('GetNumSubSections', 'GetSubSectionAtIndex'),
- 'SBThread': ('GetNumFrames', 'GetFrameAtIndex'),
-
- 'SBInstructionList': ('GetSize', 'GetInstructionAtIndex'),
- 'SBStringList': ('GetSize', 'GetStringAtIndex',),
- 'SBSymbolContextList': ('GetSize', 'GetContextAtIndex'),
- 'SBTypeList': ('GetSize', 'GetTypeAtIndex'),
- 'SBValueList': ('GetSize', 'GetValueAtIndex'),
-
- 'SBType': ('GetNumberChildren', 'GetChildAtIndex'),
- 'SBValue': ('GetNumChildren', 'GetChildAtIndex'),
-
- # SBTarget needs special processing, see below.
- 'SBTarget': {'module': ('GetNumModules', 'GetModuleAtIndex'),
- 'breakpoint': ('GetNumBreakpoints', 'GetBreakpointAtIndex'),
- 'watchpoint': ('GetNumWatchpoints', 'GetWatchpointAtIndex')
- },
+d = {'SBModule': ('GetNumSymbols', 'GetSymbolAtIndex'),
# SBModule has an additional section_iter(), see below.
'SBModule-section': ('GetNumSections', 'GetSectionAtIndex'),
@@ -238,16 +214,9 @@ for line in content.splitlines():
if match:
# We found the beginning of the __init__ method definition.
# This is a good spot to insert the iter support.
- #
- # But note that SBTarget has three types of iterations.
- if cls == "SBTarget":
- new_content.add_line(module_iter % (d[cls]['module']))
- new_content.add_line(breakpoint_iter % (d[cls]['breakpoint']))
- new_content.add_line(watchpoint_iter % (d[cls]['watchpoint']))
- else:
- if (state & DEFINING_ITERATOR):
- new_content.add_line(iter_def % d[cls])
- new_content.add_line(len_def % d[cls][0])
+
+ new_content.add_line(iter_def % d[cls])
+ new_content.add_line(len_def % d[cls][0])
# SBModule has extra SBSection, SBCompileUnit iterators and
# symbol_in_section_iter()!
diff --git a/lldb/scripts/interface/SBBreakpoint.i b/lldb/scripts/interface/SBBreakpoint.i
index ee9cdc1a7bb..de80de3835d 100644
--- a/lldb/scripts/interface/SBBreakpoint.i
+++ b/lldb/scripts/interface/SBBreakpoint.i
@@ -287,7 +287,17 @@ public:
for idx in range(len(accessor)):
locations.append(accessor[idx])
return locations
-
+
+ def __iter__(self):
+ '''Iterate over all breakpoint locations in a lldb.SBBreakpoint
+ object.'''
+ return lldb_iter(self, 'GetNumLocations', 'GetLocationAtIndex')
+
+ def __len__(self):
+ '''Return the number of breakpoint locations in a lldb.SBBreakpoint
+ object.'''
+ return self.GetNumLocations()
+
__swig_getmethods__["locations"] = get_breakpoint_location_list
if _newclass: locations = property(get_breakpoint_location_list, None, doc='''A read only property that returns a list() of lldb.SBBreakpointLocation objects for this breakpoint.''')
diff --git a/lldb/scripts/interface/SBCompileUnit.i b/lldb/scripts/interface/SBCompileUnit.i
index 0ddc576bc45..1421813320c 100644
--- a/lldb/scripts/interface/SBCompileUnit.i
+++ b/lldb/scripts/interface/SBCompileUnit.i
@@ -120,6 +120,15 @@ public:
operator != (const lldb::SBCompileUnit &rhs) const;
%pythoncode %{
+ def __iter__(self):
+ '''Iterate over all line entries in a lldb.SBCompileUnit object.'''
+ return lldb_iter(self, 'GetNumLineEntries', 'GetLineEntryAtIndex')
+
+ def __len__(self):
+ '''Return the number of line entries in a lldb.SBCompileUnit
+ object.'''
+ return self.GetNumLineEntries()
+
__swig_getmethods__["file"] = GetFileSpec
if _newclass: file = property(GetFileSpec, None, doc='''A read only property that returns the same result an lldb object that represents the source file (lldb.SBFileSpec) for the compile unit.''')
diff --git a/lldb/scripts/interface/SBDebugger.i b/lldb/scripts/interface/SBDebugger.i
index da9c9b75cc9..9397d738310 100644
--- a/lldb/scripts/interface/SBDebugger.i
+++ b/lldb/scripts/interface/SBDebugger.i
@@ -435,6 +435,17 @@ public:
lldb::SBError
RunREPL (lldb::LanguageType language, const char *repl_options);
+
+ %pythoncode%{
+ def __iter__(self):
+ '''Iterate over all targets in a lldb.SBDebugger object.'''
+ return lldb_iter(self, 'GetNumTargets', 'GetTargetAtIndex')
+
+ def __len__(self):
+ '''Return the number of targets in a lldb.SBDebugger object.'''
+ return self.GetNumTargets()
+ %}
+
}; // class SBDebugger
} // namespace lldb
diff --git a/lldb/scripts/interface/SBInstructionList.i b/lldb/scripts/interface/SBInstructionList.i
index cbc4351ee59..d877e7bc29e 100644
--- a/lldb/scripts/interface/SBInstructionList.i
+++ b/lldb/scripts/interface/SBInstructionList.i
@@ -64,6 +64,11 @@ public:
DumpEmulationForAllInstructions (const char *triple);
%pythoncode %{
+ def __iter__(self):
+ '''Iterate over all instructions in a lldb.SBInstructionList
+ object.'''
+ return lldb_iter(self, 'GetSize', 'GetInstructionAtIndex')
+
def __len__(self):
'''Access len of the instruction list.'''
return int(self.GetSize())
diff --git a/lldb/scripts/interface/SBProcess.i b/lldb/scripts/interface/SBProcess.i
index 9cb47419d93..7e00ed39288 100644
--- a/lldb/scripts/interface/SBProcess.i
+++ b/lldb/scripts/interface/SBProcess.i
@@ -497,6 +497,15 @@ public:
for idx in range(len(accessor)):
threads.append(accessor[idx])
return threads
+
+ def __iter__(self):
+ '''Iterate over all threads in a lldb.SBProcess object.'''
+ return lldb_iter(self, 'GetNumThreads', 'GetThreadAtIndex')
+
+ def __len__(self):
+ '''Return the number of threads in a lldb.SBProcess object.'''
+ return self.GetNumThreads()
+
__swig_getmethods__["threads"] = get_process_thread_list
if _newclass: threads = property(get_process_thread_list, None, doc='''A read only property that returns a list() of lldb.SBThread objects for this process.''')
diff --git a/lldb/scripts/interface/SBSection.i b/lldb/scripts/interface/SBSection.i
index 9cf7052063b..8dc3d1564a5 100644
--- a/lldb/scripts/interface/SBSection.i
+++ b/lldb/scripts/interface/SBSection.i
@@ -118,6 +118,14 @@ public:
operator != (const lldb::SBSection &rhs);
%pythoncode %{
+ def __iter__(self):
+ '''Iterate over all subsections in a lldb.SBSection object.'''
+ return lldb_iter(self, 'GetNumSubSections', 'GetSubSectionAtIndex')
+
+ def __len__(self):
+ '''Return the number of subsections in a lldb.SBSection object.'''
+ return self.GetNumSubSections()
+
def get_addr(self):
return SBAddress(self, 0)
diff --git a/lldb/scripts/interface/SBStringList.i b/lldb/scripts/interface/SBStringList.i
index 48869a146ad..a866cabc376 100644
--- a/lldb/scripts/interface/SBStringList.i
+++ b/lldb/scripts/interface/SBStringList.i
@@ -40,6 +40,16 @@ public:
void
Clear ();
+
+ %pythoncode%{
+ def __iter__(self):
+ '''Iterate over all strings in a lldb.SBStringList object.'''
+ return lldb_iter(self, 'GetSize', 'GetStringAtIndex')
+
+ def __len__(self):
+ '''Return the number of strings in a lldb.SBStringList object.'''
+ return self.GetSize()
+ %}
};
} // namespace lldb
diff --git a/lldb/scripts/interface/SBSymbolContextList.i b/lldb/scripts/interface/SBSymbolContextList.i
index ee3df2f6d2d..f35caa61438 100644
--- a/lldb/scripts/interface/SBSymbolContextList.i
+++ b/lldb/scripts/interface/SBSymbolContextList.i
@@ -62,6 +62,11 @@ public:
Clear();
%pythoncode %{
+ def __iter__(self):
+ '''Iterate over all symbol contexts in a lldb.SBSymbolContextList
+ object.'''
+ return lldb_iter(self, 'GetSize', 'GetContextAtIndex')
+
def __len__(self):
return int(self.GetSize())
diff --git a/lldb/scripts/interface/SBTarget.i b/lldb/scripts/interface/SBTarget.i
index 7ae234f8b2c..4d4f2c6eb6f 100644
--- a/lldb/scripts/interface/SBTarget.i
+++ b/lldb/scripts/interface/SBTarget.i
@@ -1103,6 +1103,21 @@ public:
modules.append(self.GetModuleAtIndex(idx))
return modules
+ def module_iter(self):
+ '''Returns an iterator over all modules in a lldb.SBTarget
+ object.'''
+ return lldb_iter(self, 'GetNumModules', 'GetModuleAtIndex')
+
+ def breakpoint_iter(self):
+ '''Returns an iterator over all breakpoints in a lldb.SBTarget
+ object.'''
+ return lldb_iter(self, 'GetNumBreakpoints', 'GetBreakpointAtIndex')
+
+ def watchpoint_iter(self):
+ '''Returns an iterator over all watchpoints in a lldb.SBTarget
+ object.'''
+ return lldb_iter(self, 'GetNumWatchpoints', 'GetWatchpointAtIndex')
+
__swig_getmethods__["modules"] = get_modules_array
if _newclass: modules = property(get_modules_array, None, doc='''A read only property that returns a list() of lldb.SBModule objects contained in this target. This list is a list all modules that the target currently is tracking (the main executable and all dependent shared libraries).''')
diff --git a/lldb/scripts/interface/SBThread.i b/lldb/scripts/interface/SBThread.i
index d23722511eb..86ec280de81 100644
--- a/lldb/scripts/interface/SBThread.i
+++ b/lldb/scripts/interface/SBThread.i
@@ -428,6 +428,14 @@ public:
SafeToCallFunctions ();
%pythoncode %{
+ def __iter__(self):
+ '''Iterate over all frames in a lldb.SBThread object.'''
+ return lldb_iter(self, 'GetNumFrames', 'GetFrameAtIndex')
+
+ def __len__(self):
+ '''Return the number of frames in a lldb.SBThread object.'''
+ return self.GetNumFrames()
+
class frames_access(object):
'''A helper object that will lazily hand out frames for a thread when supplied an index.'''
def __init__(self, sbthread):
diff --git a/lldb/scripts/interface/SBType.i b/lldb/scripts/interface/SBType.i
index 983465e6f8f..addfe6c31cc 100644
--- a/lldb/scripts/interface/SBType.i
+++ b/lldb/scripts/interface/SBType.i
@@ -509,6 +509,16 @@ public:
GetSize();
~SBTypeList();
+
+ %pythoncode%{
+ def __iter__(self):
+ '''Iterate over all types in a lldb.SBTypeList object.'''
+ return lldb_iter(self, 'GetSize', 'GetTypeAtIndex')
+
+ def __len__(self):
+ '''Return the number of types in a lldb.SBTypeList object.'''
+ return self.GetSize()
+ %}
};
} // namespace lldb
diff --git a/lldb/scripts/interface/SBValue.i b/lldb/scripts/interface/SBValue.i
index 68943547457..eca83d5d426 100644
--- a/lldb/scripts/interface/SBValue.i
+++ b/lldb/scripts/interface/SBValue.i
@@ -495,6 +495,14 @@ public:
for idx in range(len(accessor)):
children.append(accessor[idx])
return children
+
+ def __iter__(self):
+ '''Iterate over all child values of a lldb.SBValue object.'''
+ return lldb_iter(self, 'GetNumChildren', 'GetChildAtIndex')
+
+ def __len__(self):
+ '''Return the number of child values of a lldb.SBValue object.'''
+ return self.GetNumChildren()
__swig_getmethods__["children"] = get_value_child_list
if _newclass: children = property(get_value_child_list, None, doc='''A read only property that returns a list() of lldb.SBValue objects for the children of the value.''')
diff --git a/lldb/scripts/interface/SBValueList.i b/lldb/scripts/interface/SBValueList.i
index c2cdda23700..7960e09c268 100644
--- a/lldb/scripts/interface/SBValueList.i
+++ b/lldb/scripts/interface/SBValueList.i
@@ -102,6 +102,10 @@ public:
GetFirstValueByName (const char* name) const;
%pythoncode %{
+ def __iter__(self):
+ '''Iterate over all values in a lldb.SBValueList object.'''
+ return lldb_iter(self, 'GetSize', 'GetValueAtIndex')
+
def __len__(self):
return int(self.GetSize())
OpenPOWER on IntegriCloud