diff options
Diffstat (limited to 'sca-cpp/trunk/modules/python/eval.hpp')
-rw-r--r-- | sca-cpp/trunk/modules/python/eval.hpp | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/sca-cpp/trunk/modules/python/eval.hpp b/sca-cpp/trunk/modules/python/eval.hpp index 1b9392aed7..09c2cba92d 100644 --- a/sca-cpp/trunk/modules/python/eval.hpp +++ b/sca-cpp/trunk/modules/python/eval.hpp @@ -39,16 +39,23 @@ namespace python { */ class PythonRuntime { public: - PythonRuntime() { - Py_Initialize(); - + PythonRuntime() : owner(true) { + Py_InitializeEx(0); setupIO(); } + PythonRuntime(unused const PythonRuntime& r) : owner(false) { + } + ~PythonRuntime() { + if (!owner) + return; + //Py_Finalize(); } -} pythonRuntime; +private: + const bool owner; +}; /** * Declare conversion functions. @@ -211,8 +218,15 @@ const failable<value> evalScript(const value& expr, PyObject* script) { // Get the requested function PyObject* func = PyObject_GetAttrString(script, c_str(car<value>(expr))); - if (func == NULL) + if (func == NULL) { + + // The start, stop, and restart functions are optional + const value fn = car<value>(expr); + if (fn == "start" || fn == "stop" || fn == "restart") + return value(false); + return mkfailure<value>(string("Couldn't find function: ") + car<value>(expr) + " : " + lastError()); + } if (!PyCallable_Check(func)) { Py_DECREF(func); return mkfailure<value>(string("Couldn't find callable function: ") + car<value>(expr)); |