[Lldb-commits] [lldb] r132935 - /lldb/trunk/source/Interpreter/ScriptInterpreterPython.cpp
Caroline Tice
ctice at apple.com
Mon Jun 13 14:33:00 PDT 2011
Author: ctice
Date: Mon Jun 13 16:33:00 2011
New Revision: 132935
URL: http://llvm.org/viewvc/llvm-project?rev=132935&view=rev
Log:
Cleaning up the Python script interpreter: Use the
embedded_interpreter.py file rather than keeping it
all in a string and compiling the string (easier to maintain,
easier to read, remove redundancy).
Modified:
lldb/trunk/source/Interpreter/ScriptInterpreterPython.cpp
Modified: lldb/trunk/source/Interpreter/ScriptInterpreterPython.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Interpreter/ScriptInterpreterPython.cpp?rev=132935&r1=132934&r2=132935&view=diff
==============================================================================
--- lldb/trunk/source/Interpreter/ScriptInterpreterPython.cpp (original)
+++ lldb/trunk/source/Interpreter/ScriptInterpreterPython.cpp Mon Jun 13 16:33:00 2011
@@ -35,109 +35,6 @@
static ScriptInterpreter::SWIGInitCallback g_swig_init_callback = NULL;
static ScriptInterpreter::SWIGBreakpointCallbackFunction g_swig_breakpoint_callback = NULL;
-const char embedded_interpreter_string[] =
-"import readline\n\
-import code\n\
-import sys\n\
-import traceback\n\
-\n\
-class SimpleREPL(code.InteractiveConsole):\n\
- def __init__(self, prompt, dict):\n\
- code.InteractiveConsole.__init__(self,dict)\n\
- self.prompt = prompt\n\
- self.loop_exit = False\n\
- self.dict = dict\n\
-\n\
- def interact(self):\n\
- try:\n\
- sys.ps1\n\
- except AttributeError:\n\
- sys.ps1 = \">>> \"\n\
- try:\n\
- sys.ps2\n\
- except AttributeError:\n\
- sys.ps2 = \"... \"\n\
-\n\
- while not self.loop_exit:\n\
- try:\n\
- self.read_py_command()\n\
- except (SystemExit, EOFError):\n\
- # EOF while in Python just breaks out to top level.\n\
- self.write('\\n')\n\
- self.loop_exit = True\n\
- break\n\
- except KeyboardInterrupt:\n\
- self.write(\"\\nKeyboardInterrupt\\n\")\n\
- self.resetbuffer()\n\
- more = 0\n\
- except:\n\
- traceback.print_exc()\n\
-\n\
- def process_input (self, in_str):\n\
- # Canonicalize the format of the input string\n\
- temp_str = in_str\n\
- temp_str.strip(' \t')\n\
- words = temp_str.split()\n\
- temp_str = ('').join(words)\n\
-\n\
- # Check the input string to see if it was the quit\n\
- # command. If so, intercept it, so that it doesn't\n\
- # close stdin on us!\n\
- if (temp_str.lower() == \"quit()\" or temp_str.lower() == \"exit()\"):\n\
- self.loop_exit = True\n\
- in_str = \"raise SystemExit \"\n\
- return in_str\n\
-\n\
- def my_raw_input (self, prompt):\n\
- stream = sys.stdout\n\
- stream.write (prompt)\n\
- stream.flush ()\n\
- try:\n\
- line = sys.stdin.readline()\n\
- except KeyboardInterrupt:\n\
- line = \" \\n\"\n\
- except (SystemExit, EOFError):\n\
- line = \"quit()\\n\"\n\
- if not line:\n\
- raise EOFError\n\
- if line[-1] == '\\n':\n\
- line = line[:-1]\n\
- return line\n\
-\n\
- def read_py_command(self):\n\
- # Read off a complete Python command.\n\
- more = 0\n\
- while 1:\n\
- if more:\n\
- prompt = sys.ps2\n\
- else:\n\
- prompt = sys.ps1\n\
- line = self.my_raw_input(prompt)\n\
- # Can be None if sys.stdin was redefined\n\
- encoding = getattr(sys.stdin, \"encoding\", None)\n\
- if encoding and not isinstance(line, unicode):\n\
- line = line.decode(encoding)\n\
- line = self.process_input (line)\n\
- more = self.push(line)\n\
- if not more:\n\
- break\n\
-\n\
- def one_line (self, input):\n\
- line = self.process_input (input)\n\
- more = self.push(line)\n\
- if more:\n\
- self.write (\"Input not a complete line.\")\n\
- self.resetbuffer()\n\
- more = 0\n\
-\n\
-def run_python_interpreter (dict):\n\
- # Pass in the dictionary, for continuity from one session to the next.\n\
- repl = SimpleREPL('>>> ', dict)\n\
- repl.interact()\n\
-\n\
-def run_one_line (dict, input_string):\n\
- repl = SimpleREPL ('', dict)\n\
- repl.one_line (input_string)\n";
static int
_check_and_flush (FILE *stream)
@@ -1542,44 +1439,21 @@
PyEval_InitThreads ();
Py_InitializeEx (0);
- PyObject *compiled_module = Py_CompileString (embedded_interpreter_string,
- "embedded_interpreter.py",
- Py_file_input);
-
- PyObject *py_error = PyErr_Occurred ();
- if (py_error != NULL)
- {
- PyErr_Print();
- PyErr_Clear();
- }
-
-
// Initialize SWIG after setting up python
assert (g_swig_init_callback != NULL);
g_swig_init_callback ();
// Update the path python uses to search for modules to include the current directory.
- int success = PyRun_SimpleString ("import sys");
- success = PyRun_SimpleString ("sys.path.append ('.')");
+ PyRun_SimpleString ("import sys");
+ PyRun_SimpleString ("sys.path.append ('.')");
- PyObject *pmod = NULL;
+ PyRun_SimpleString ("import embedded_interpreter");
- if (compiled_module)
- {
- pmod = PyImport_ExecCodeModule (const_cast<char*> ("embedded_interpreter"),
- compiled_module);
- Py_DECREF (compiled_module);
- }
-
- if (pmod != NULL)
- {
- PyRun_SimpleString ("from embedded_interpreter import run_python_interpreter");
- PyRun_SimpleString ("from embedded_interpreter import run_one_line");
- PyRun_SimpleString ("import sys");
- PyRun_SimpleString ("from termios import *");
- Py_DECREF (pmod);
- }
+ PyRun_SimpleString ("from embedded_interpreter import run_python_interpreter");
+ PyRun_SimpleString ("from embedded_interpreter import run_one_line");
+ PyRun_SimpleString ("import sys");
+ PyRun_SimpleString ("from termios import *");
stdin_tty_state.Restore();
}
More information about the lldb-commits
mailing list