mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-01-24 18:20:38 +00:00
b9c1b51e45
*** to conform to clang-format’s LLVM style. This kind of mass change has *** two obvious implications: Firstly, merging this particular commit into a downstream fork may be a huge effort. Alternatively, it may be worth merging all changes up to this commit, performing the same reformatting operation locally, and then discarding the merge for this particular commit. The commands used to accomplish this reformatting were as follows (with current working directory as the root of the repository): find . \( -iname "*.c" -or -iname "*.cpp" -or -iname "*.h" -or -iname "*.mm" \) -exec clang-format -i {} + find . -iname "*.py" -exec autopep8 --in-place --aggressive --aggressive {} + ; The version of clang-format used was 3.9.0, and autopep8 was 1.2.4. Secondly, “blame” style tools will generally point to this commit instead of a meaningful prior commit. There are alternatives available that will attempt to look through this change and find the appropriate prior commit. YMMV. llvm-svn: 280751
134 lines
4.1 KiB
Python
134 lines
4.1 KiB
Python
import sys
|
|
if sys.version_info[0] < 3:
|
|
import __builtin__ as builtins
|
|
else:
|
|
import builtins
|
|
import code
|
|
import lldb
|
|
import traceback
|
|
|
|
try:
|
|
import readline
|
|
import rlcompleter
|
|
except ImportError:
|
|
have_readline = False
|
|
except AttributeError:
|
|
# This exception gets hit by the rlcompleter when Linux is using
|
|
# the readline suppression import.
|
|
have_readline = False
|
|
else:
|
|
have_readline = True
|
|
if 'libedit' in readline.__doc__:
|
|
readline.parse_and_bind('bind ^I rl_complete')
|
|
else:
|
|
readline.parse_and_bind('tab: complete')
|
|
|
|
g_builtin_override_called = False
|
|
|
|
|
|
class LLDBQuitter(object):
|
|
|
|
def __init__(self, name):
|
|
self.name = name
|
|
|
|
def __repr__(self):
|
|
self()
|
|
|
|
def __call__(self, code=None):
|
|
global g_builtin_override_called
|
|
g_builtin_override_called = True
|
|
raise SystemExit(-1)
|
|
|
|
|
|
def setquit():
|
|
'''Redefine builtin functions 'quit()' and 'exit()' to print a message and raise an EOFError exception.'''
|
|
# This function will be called prior to each interactive
|
|
# interpreter loop or each single line, so we set the global
|
|
# g_builtin_override_called to False so we know if a SystemExit
|
|
# is thrown, we can catch it and tell the difference between
|
|
# a call to "quit()" or "exit()" and something like
|
|
# "sys.exit(123)"
|
|
global g_builtin_override_called
|
|
g_builtin_override_called = False
|
|
builtins.quit = LLDBQuitter('quit')
|
|
builtins.exit = LLDBQuitter('exit')
|
|
|
|
# When running one line, we might place the string to run in this string
|
|
# in case it would be hard to correctly escape a string's contents
|
|
|
|
g_run_one_line_str = None
|
|
|
|
|
|
def get_terminal_size(fd):
|
|
try:
|
|
import fcntl
|
|
import termios
|
|
import struct
|
|
hw = struct.unpack('hh', fcntl.ioctl(fd, termios.TIOCGWINSZ, '1234'))
|
|
except:
|
|
hw = (0, 0)
|
|
return hw
|
|
|
|
|
|
def readfunc_stdio(prompt):
|
|
sys.stdout.write(prompt)
|
|
return sys.stdin.readline().rstrip()
|
|
|
|
|
|
def run_python_interpreter(local_dict):
|
|
# Pass in the dictionary, for continuity from one session to the next.
|
|
setquit()
|
|
try:
|
|
fd = sys.stdin.fileno()
|
|
interacted = False
|
|
if get_terminal_size(fd)[1] == 0:
|
|
try:
|
|
import termios
|
|
old = termios.tcgetattr(fd)
|
|
if old[3] & termios.ECHO:
|
|
# Need to turn off echoing and restore
|
|
new = termios.tcgetattr(fd)
|
|
new[3] = new[3] & ~termios.ECHO
|
|
try:
|
|
termios.tcsetattr(fd, termios.TCSADRAIN, new)
|
|
interacted = True
|
|
code.interact(
|
|
banner="Python Interactive Interpreter. To exit, type 'quit()', 'exit()'.",
|
|
readfunc=readfunc_stdio,
|
|
local=local_dict)
|
|
finally:
|
|
termios.tcsetattr(fd, termios.TCSADRAIN, old)
|
|
except:
|
|
pass
|
|
# Don't need to turn off echoing
|
|
if not interacted:
|
|
code.interact(
|
|
banner="Python Interactive Interpreter. To exit, type 'quit()', 'exit()' or Ctrl-D.",
|
|
readfunc=readfunc_stdio,
|
|
local=local_dict)
|
|
else:
|
|
# We have a real interactive terminal
|
|
code.interact(
|
|
banner="Python Interactive Interpreter. To exit, type 'quit()', 'exit()' or Ctrl-D.",
|
|
local=local_dict)
|
|
except SystemExit as e:
|
|
global g_builtin_override_called
|
|
if not g_builtin_override_called:
|
|
print('Script exited with %s' % (e))
|
|
|
|
|
|
def run_one_line(local_dict, input_string):
|
|
global g_run_one_line_str
|
|
setquit()
|
|
try:
|
|
repl = code.InteractiveConsole(local_dict)
|
|
if input_string:
|
|
repl.runsource(input_string)
|
|
elif g_run_one_line_str:
|
|
repl.runsource(g_run_one_line_str)
|
|
|
|
except SystemExit as e:
|
|
global g_builtin_override_called
|
|
if not g_builtin_override_called:
|
|
print('Script exited with %s' % (e))
|