aboutsummaryrefslogtreecommitdiff
path: root/lldb/scripts/Python/modify-python-lldb.py
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/scripts/Python/modify-python-lldb.py')
-rw-r--r--lldb/scripts/Python/modify-python-lldb.py141
1 files changed, 0 insertions, 141 deletions
diff --git a/lldb/scripts/Python/modify-python-lldb.py b/lldb/scripts/Python/modify-python-lldb.py
deleted file mode 100644
index 4361b6c..0000000
--- a/lldb/scripts/Python/modify-python-lldb.py
+++ /dev/null
@@ -1,141 +0,0 @@
-#
-# modify-python-lldb.py
-#
-# This script modifies the lldb module (which was automatically generated via
-# running swig) to support iteration and/or equality operations for certain lldb
-# objects, implements truth value testing for certain lldb objects, and adds a
-# global variable 'debugger_unique_id' which is initialized to 0.
-#
-# As a cleanup step, it also removes the 'residues' from the autodoc features of
-# swig. For an example, take a look at SBTarget.h header file, where we take
-# advantage of the already existing doxygen C++-docblock and make it the Python
-# docstring for the same method. The 'residues' in this context include the c
-# comment marker, the trailing blank (SPC's) line, and the doxygen comment start
-# marker.
-#
-# In addition to the 'residues' removal during the cleanup step, it also
-# transforms the 'char' data type (which was actually 'char *' but the 'autodoc'
-# feature of swig removes ' *' from it) into 'str' (as a Python str type).
-
-# System modules
-import sys
-import re
-if sys.version_info.major >= 3:
- import io as StringIO
-else:
- import StringIO
-
-# import use_lldb_suite so we can find third-party and helper modules
-import use_lldb_suite
-
-# Third party modules
-import six
-
-# LLDB modules
-
-if len(sys.argv) != 2:
- output_name = "./lldb.py"
-else:
- output_name = sys.argv[1] + "/lldb.py"
-
-# print "output_name is '" + output_name + "'"
-
-#
-# Residues to be removed.
-#
-# The demarcation point for turning on/off residue removal state.
-# When bracketed by the lines, the CLEANUP_DOCSTRING state (see below) is ON.
-toggle_docstring_cleanup_line = ' """'
-
-
-def char_to_str_xform(line):
- """This transforms the 'char', i.e, 'char *' to 'str', Python string."""
- line = line.replace(' char', ' str')
- line = line.replace('char ', 'str ')
- # Special case handling of 'char **argv' and 'char **envp'.
- line = line.replace('str argv', 'list argv')
- line = line.replace('str envp', 'list envp')
- return line
-
-#
-# The one-liner docstring also needs char_to_str transformation, btw.
-#
-TWO_SPACES = ' ' * 2
-EIGHT_SPACES = ' ' * 8
-one_liner_docstring_pattern = re.compile(
- '^(%s|%s)""".*"""$' %
- (TWO_SPACES, EIGHT_SPACES))
-
-class NewContent(StringIO.StringIO):
- """Simple facade to keep track of the previous line to be committed."""
-
- def __init__(self):
- StringIO.StringIO.__init__(self)
- self.prev_line = None
-
- def add_line(self, a_line):
- """Add a line to the content, if there is a previous line, commit it."""
- if self.prev_line is not None:
- self.write(self.prev_line + "\n")
- self.prev_line = a_line
-
- def del_line(self):
- """Forget about the previous line, do not commit it."""
- self.prev_line = None
-
- def del_blank_line(self):
- """Forget about the previous line if it is a blank line."""
- if self.prev_line is not None and not self.prev_line.strip():
- self.prev_line = None
-
- def finish(self):
- """Call this when you're finished with populating content."""
- if self.prev_line is not None:
- self.write(self.prev_line + "\n")
- self.prev_line = None
-
-# The new content will have the iteration protocol defined for our lldb
-# objects.
-new_content = NewContent()
-
-with open(output_name, 'r') as f_in:
- content = f_in.read()
-
-# These define the states of our finite state machine.
-NORMAL = 1
-CLEANUP_DOCSTRING = 8
-
-# Our FSM begins its life in the NORMAL state. The state CLEANUP_DOCSTRING can
-# be entered from the NORMAL. While in this state, the FSM is fixing/cleaning
-# the Python docstrings generated by the swig docstring features.
-state = NORMAL
-
-for line in content.splitlines():
- # If ' """' is the sole line, prepare to transition to the
- # CLEANUP_DOCSTRING state or out of it.
-
- if line == toggle_docstring_cleanup_line:
- if state & CLEANUP_DOCSTRING:
- state ^= CLEANUP_DOCSTRING
- else:
- state |= CLEANUP_DOCSTRING
-
- if (state & CLEANUP_DOCSTRING):
- line = char_to_str_xform(line)
-
- # Note that the transition out of CLEANUP_DOCSTRING is handled at the
- # beginning of this function already.
-
- # This deals with one-liner docstring, for example, SBThread.GetName:
- # """GetName(self) -> char""".
- if one_liner_docstring_pattern.match(line):
- line = char_to_str_xform(line)
-
- # Pass the original line of content to new_content.
- new_content.add_line(line)
-
-# We are finished with recording new content.
-new_content.finish()
-
-with open(output_name, 'w') as f_out:
- f_out.write(new_content.getvalue())