PageRenderTime 23ms CodeModel.GetById 14ms app.highlight 7ms RepoModel.GetById 1ms app.codeStats 0ms

/branch/0.3.x/pykd_ext/pyapi.h

#
C Header | 205 lines | 143 code | 61 blank | 1 comment | 8 complexity | 85fabd844592e76c315b0549de4e3243 MD5 | raw file
Possible License(s): CC-BY-SA-3.0, Unlicense
  1#pragma once
  2
  3
  4typedef void*  PyObject;
  5typedef void*  PyThreadState;
  6typedef PyObject *(*PyCFunction)(PyObject *, PyObject *);
  7
  8
  9typedef enum { PyGILState_LOCKED, PyGILState_UNLOCKED } PyGILState_STATE;
 10
 11const int Py_single_input = 256;
 12const int Py_file_input = 257;
 13const int Py_eval_input = 258;
 14
 15const int METH_VARARGS = 0x0001;
 16
 17struct PyMethodDef {
 18    const char  *ml_name;   /* The name of the built-in function/method */
 19    PyCFunction ml_meth;    /* The C function that implements it */
 20    int         ml_flags;   /* Combination of METH_xxx flags, which mostly
 21                            describe the args expected by the C func */
 22    const char  *ml_doc;    /* The __doc__ attribute, or NULL */
 23};
 24
 25typedef struct PyMethodDef PyMethodDef;
 26
 27void __stdcall Py_IncRef(PyObject* object);
 28void __stdcall Py_DecRef(PyObject* object);
 29
 30PyObject* __stdcall PyString_FromString(const char *v);
 31char* PyString_AsString(PyObject *string);
 32
 33PyObject* PyImport_Import(PyObject *name);
 34PyObject* __stdcall PyImport_ImportModule(const char *name);
 35
 36PyObject* __stdcall  PyDict_New();
 37int __stdcall PyDict_SetItemString(PyObject *p, const char *key, PyObject *val);
 38
 39PyObject* __stdcall PyTuple_New(size_t len);
 40PyObject* __stdcall PyTuple_GetItem(PyObject *p, size_t pos);
 41int __stdcall PyTuple_SetItem(PyObject *p, size_t pos, PyObject *obj);
 42PyObject* __stdcall PyDict_GetItemString(PyObject *p, const char *key);
 43size_t __stdcall PyTuple_Size(PyObject *p);
 44
 45size_t PyList_Size(PyObject* list);
 46PyObject* PyList_GetItem(PyObject *list, size_t index);
 47
 48PyObject* __stdcall PyCFunction_NewEx(PyMethodDef *, PyObject *, PyObject *);
 49PyObject* __stdcall PyClass_New(PyObject* className, PyObject* classBases, PyObject* classDict);
 50PyObject* __stdcall PyMethod_New(PyObject *func, PyObject *self, PyObject *classobj);
 51PyObject* __stdcall PyInstance_New(PyObject *classobj, PyObject *arg, PyObject *kw);
 52
 53PyThreadState* __stdcall PyEval_SaveThread();
 54void __stdcall PyEval_RestoreThread(PyThreadState *tstate);
 55
 56int __stdcall PySys_SetObject(char *name, PyObject *v);
 57PyObject* __stdcall PySys_GetObject(char *name);
 58void __stdcall PySys_SetArgv(int argc, char **argv);
 59void __stdcall PySys_SetArgv_Py3(int argc, wchar_t **argv);
 60
 61int __stdcall PyRun_SimpleString(const char* str);
 62PyObject* __stdcall PyRun_String(const char *str, int start, PyObject *globals, PyObject *locals);
 63PyObject* PyRun_File(FILE *fp, const char *filename, int start, PyObject *globals, PyObject *locals);
 64
 65typedef void(*PyCapsule_Destructor)(PyObject *);
 66PyObject* PyCapsule_New(void *pointer, const char *name, PyCapsule_Destructor destructor);
 67void* PyCapsule_GetPointer(PyObject *capsule, const char *name);
 68
 69int PyObject_SetAttrString(PyObject *o, const char *attr_name, PyObject *v);
 70PyObject* PyObject_GetAttrString(PyObject *o, const char *attr_name);
 71PyObject* PyObject_CallObject(PyObject *callable_object, PyObject *args);
 72PyObject* PyObject_Call(PyObject *callable_object, PyObject *args, PyObject *kw);
 73PyObject* PyUnicode_FromWideChar(const wchar_t *w, size_t size);
 74
 75PyObject* PyBool_FromLong(long v);
 76
 77PyObject* Py_None();
 78PyObject* PyExc_SystemExit();
 79PyObject* PyType_Type();
 80PyObject* PyProperty_Type();
 81
 82void PyErr_Fetch(PyObject **ptype, PyObject **pvalue, PyObject **ptraceback);
 83void PyErr_NormalizeException(PyObject**exc, PyObject**val, PyObject**tb);
 84void PyErr_SetString(PyObject *type, const char *message);
 85void PyErr_Clear();
 86
 87PyObject* PyFile_FromString(char *filename, char *mode);
 88FILE* PyFile_AsFile(PyObject *pyfile);
 89FILE* _Py_fopen(const char* filename, const char* mode);
 90
 91PyObject* __stdcall PyUnicode_FromString(const char*  str);
 92PyObject* __stdcall PyInstanceMethod_New(PyObject *func);
 93size_t __stdcall PyUnicode_AsWideChar(PyObject *unicode, wchar_t *w, size_t size);
 94int __stdcall Py_AddPendingCall(int(*func)(void *), void *arg);
 95
 96PyGILState_STATE __stdcall PyGILState_Ensure();
 97void __stdcall PyGILState_Release(PyGILState_STATE);
 98
 99PyObject* __stdcall PyDescr_NewMethod(PyObject* type, struct PyMethodDef *meth);
100
101bool IsPy3();
102
103class  PyObjectRef;
104
105
106class PyObjectBorrowedRef
107{
108    friend PyObjectRef;
109
110public:
111
112    PyObjectBorrowedRef(PyObject* obj)
113    {
114        m_obj = obj;
115        if (m_obj)
116            Py_IncRef(m_obj);
117    }
118
119    ~PyObjectBorrowedRef()
120    {
121        if (m_obj)
122            Py_DecRef(m_obj);
123    }
124
125    operator PyObject*()
126    {
127        return m_obj;
128    }
129
130private:
131
132
133    PyObjectBorrowedRef(const PyObjectRef& obj) = delete;
134
135    PyObject*  m_obj;
136};
137
138
139class PyObjectRef
140{
141public:
142
143    PyObjectRef() : m_obj(0)
144    {}
145
146    PyObjectRef(PyObject* obj)
147    {
148        m_obj = obj;
149    }
150
151    ~PyObjectRef()
152    {
153        if (m_obj)
154            Py_DecRef(m_obj);
155    }
156
157    operator PyObject*()
158    {
159        return m_obj;
160    }
161
162    PyObjectRef& operator= (const PyObjectRef& ref)
163    {
164        if (m_obj)
165            Py_DecRef(m_obj);
166
167        m_obj = ref.m_obj;
168        if (m_obj)
169            Py_IncRef(m_obj);
170
171        return *this;
172    }
173
174    PyObjectRef& operator= (const PyObjectBorrowedRef& ref)
175    {
176        if (m_obj)
177            Py_DecRef(m_obj);
178
179        m_obj = ref.m_obj;
180        if (m_obj)
181            Py_IncRef(m_obj);
182
183        return *this;
184    }
185
186    PyObjectRef& operator= (PyObject* obj)
187    {
188        if (m_obj)
189            Py_DecRef(m_obj);
190
191        m_obj = obj;
192
193        return *this;
194    }
195
196private:
197
198    PyObjectRef(const PyObjectRef& obj) = delete;
199
200    PyObject*  m_obj;
201};
202
203
204
205