// Clint - Source code checker for C++ // Copyright (C) 2001 David Pashley // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "python.h" namespace python { // Python * Python::Instance() {{{ Python * Python::m_instance = 0; Python * Python::Instance() { if ( m_instance == 0 ) { m_instance = new Python; } return m_instance; } // }}} // Python::Python() {{{ Python::Python() { Py_Initialize(); m_argc = 0; m_argv = 0; } // }}} // int Python::run_interactive_one(string prompt) {{{ int Python::run_interactive_one(string prompt) { int result; cout << "[" << prompt << "]" << endl; result = PyRun_InteractiveOne(stdin,""); return result; } // }}} // int Python::run_interactive_loop(string prompt) {{{ int Python::run_interactive_loop(string prompt) { int result; cout << "[" << prompt << " ]" << endl; result = PyRun_InteractiveLoop(stdin,""); return result; } // }}} // void Python::set_argv(int argc,char * argv[]) {{{ void Python::set_argv(int argc,char * argv[]) { PySys_SetArgv(argc,argv); m_argc = argc; m_argv = argv; } // }}} // void Python::run_string(string cmd) {{{ void Python::run_string(string cmd) { PyRun_SimpleString(const_cast(cmd.c_str())); } // }}} // void Python::reset() {{{ void Python::reset() { Py_Finalize(); Py_Initialize(); if (m_argv != 0) { PySys_SetArgv(m_argc,m_argv); } } // }}} // void Python::add_directory_to_path(string directory) {{{ void Python::add_directory_to_path(string directory) { run_string("import sys"); run_string("sys.path = [\"" + directory + "\"] + sys.path"); } // }}} // Module load_module(string modname) {{{ Module Python::load_module(string modname) { DEBUG("Module Python::load_module(string \""<( modname.c_str() ) ); } // }}} // Module Python::import_module(string modname) {{{ Module Python::import_module(string modname) { DEBUG("Module Python::import_module(string \""<( modname.c_str() ) ), true); } // }}} void check_errors() { if ( PyErr_Occurred() ) { PyObject *ptype, *pvalue, *ptraceback; PyErr_Fetch (&ptype, &pvalue, &ptraceback); PyErr_NormalizeException (&ptype, &pvalue, &ptraceback); Object type=ptype; //Object bob = pvalue; String value = Object(pvalue).as_string(); Object traceback = ptraceback; if (PyErr_GivenExceptionMatches(ptype,PyExc_AssertionError)) { throw AssertionError( value); } else if (PyErr_GivenExceptionMatches(ptype,PyExc_AttributeError)) { throw AttributeError( value); } else if (PyErr_GivenExceptionMatches(ptype,PyExc_EOFError)) { throw EOFError( value); } else if (PyErr_GivenExceptionMatches(ptype,PyExc_FloatingPointError)) { throw FloatingPointError( value); } else if (PyErr_GivenExceptionMatches(ptype,PyExc_IOError)) { throw IOError( value); } else if (PyErr_GivenExceptionMatches(ptype,PyExc_ImportError)) { throw ImportError( value); } else if (PyErr_GivenExceptionMatches(ptype,PyExc_IndexError)) { throw IndexError( value); } else if (PyErr_GivenExceptionMatches(ptype,PyExc_KeyError)) { throw KeyError( value); } else if (PyErr_GivenExceptionMatches(ptype,PyExc_KeyboardInterrupt)) { throw KeyboardInterrupt( value); } else if (PyErr_GivenExceptionMatches(ptype,PyExc_MemoryError)) { throw MemoryError( value); } else if (PyErr_GivenExceptionMatches(ptype,PyExc_NameError)) { throw NameError( value); } else if (PyErr_GivenExceptionMatches(ptype,PyExc_NotImplementedError)) { throw NotImplementedError( value); } else if (PyErr_GivenExceptionMatches(ptype,PyExc_OSError)) { throw OSError( value); } else if (PyErr_GivenExceptionMatches(ptype,PyExc_OverflowError)) { throw OverflowError( value); } else if (PyErr_GivenExceptionMatches(ptype,PyExc_RuntimeError)) { throw RuntimeError( value); } else if (PyErr_GivenExceptionMatches(ptype,PyExc_SyntaxError)) { throw SyntaxError( value); } else if (PyErr_GivenExceptionMatches(ptype,PyExc_SystemError)) { throw SystemError( value); } else if (PyErr_GivenExceptionMatches(ptype,PyExc_SystemExit)) { throw SystemExit( value); } else if (PyErr_GivenExceptionMatches(ptype,PyExc_TypeError)) { throw TypeError( value); } else if (PyErr_GivenExceptionMatches(ptype,PyExc_ValueError)) { throw ValueError( value); } else if (PyErr_GivenExceptionMatches(ptype,PyExc_ZeroDivisionError)) { throw ZeroDivisionError( value); } else if (PyErr_GivenExceptionMatches(ptype,PyExc_EnvironmentError)) { throw EnvironmentError( value); } else if (PyErr_GivenExceptionMatches(ptype,PyExc_LookupError)) { throw LookupError(value); } else if (PyErr_GivenExceptionMatches(ptype,PyExc_ArithmeticError)) { throw ArithmeticError(value); } else if (PyErr_GivenExceptionMatches(ptype,PyExc_StandardError)) { throw StandardError(value); } else if (PyErr_GivenExceptionMatches(ptype,PyExc_Exception)) { throw Exception(value); } else { throw Exception("Unknown error has occured"); } } } }