/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