1 #include <lib/base/eerror.h>
4 #define _POSIX_C_SOURCE 200112L
7 extern "C" void init_enigma();
8 extern void bsodFatal();
10 void Impl_Py_DECREF(const char* file, int line, PyObject *obj)
14 eDebug("decref python object null pointer %s %d!!!",
18 if (obj->ob_refcnt <= 0)
20 eDebug("decref python object with refcounting value %d (%s %d)!!!", obj->ob_refcnt, file, line);
26 void Impl_Py_INCREF(const char* file, int line, PyObject *obj)
30 eDebug("incref python object null pointer %s %d!!!", file, line);
33 if (obj->ob_refcnt <= 0)
35 eDebug("incref python object with refcounting value %d (%s %d)!!!", obj->ob_refcnt, file, line);
38 if (obj->ob_refcnt == 0x7FFFFFFF)
40 eDebug("incref python object with refcounting value %d (MAX_INT!!!) (%s %d)!!!", obj->ob_refcnt, file, line);
46 #include <lib/python/python.h>
52 eDebug("create %p", this);
57 eDebug("destroy %p", this);
61 ePyObject::ePyObject(void *ptr): m_object(ptr)
63 Py_XINCREF((PyObject*)ptr);
66 ePyObject::ePyObject(ePyObject &p)
68 m_object = p.m_object;
69 Py_XINCREF((PyObject*)m_object);
72 ePyObject::ePyObject(): m_object(0)
76 ePyObject::~ePyObject()
78 Py_XDECREF((PyObject*)m_object);
81 ePyObject &ePyObject::operator=(ePyObject &p)
83 Py_XDECREF((PyObject*)m_object);
84 m_object = p.m_object;
85 Py_XINCREF((PyObject*)m_object);
89 ePyObject &ePyObject::operator=(void *object)
91 Py_XDECREF((PyObject*)m_object);
93 Py_XINCREF((PyObject*)m_object);
100 // Py_VerboseFlag = 1;
102 // Py_OptimizeFlag = 1;
114 int ePython::execute(const std::string &pythonfile, const std::string &funcname)
116 PyObject *pName, *pModule, *pDict, *pFunc, *pArgs, *pValue;
117 pName = PyString_FromString(pythonfile.c_str());
119 pModule = PyImport_Import(pName);
124 pDict = PyModule_GetDict(pModule);
126 pFunc = PyDict_GetItemString(pDict, funcname.c_str());
128 if (pFunc && PyCallable_Check(pFunc))
130 pArgs = PyTuple_New(0);
131 // implement arguments..
132 pValue = PyObject_CallObject(pFunc, pArgs);
136 printf("Result of call: %ld\n", PyInt_AsLong(pValue));
147 if (PyErr_Occurred())
154 int ePython::call(PyObject *pFunc, PyObject *pArgs)
158 if (pFunc && PyCallable_Check(pFunc))
160 pValue = PyObject_CallObject(pFunc, pArgs);
163 if (PyInt_Check(pValue))
164 res = PyInt_AsLong(pValue);
177 PyObject *ePython::resolve(const std::string &pythonfile, const std::string &funcname)
179 PyObject *pName, *pModule, *pDict, *pFunc;
181 pName = PyString_FromString(pythonfile.c_str());
183 pModule = PyImport_Import(pName);
188 pDict = PyModule_GetDict(pModule);
189 pFunc = PyDict_GetItemString(pDict, funcname.c_str());
195 if (PyErr_Occurred())