PageRenderTime 39ms CodeModel.GetById 14ms RepoModel.GetById 0ms 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. typedef void* PyObject;
  3. typedef void* PyThreadState;
  4. typedef PyObject *(*PyCFunction)(PyObject *, PyObject *);
  5. typedef enum { PyGILState_LOCKED, PyGILState_UNLOCKED } PyGILState_STATE;
  6. const int Py_single_input = 256;
  7. const int Py_file_input = 257;
  8. const int Py_eval_input = 258;
  9. const int METH_VARARGS = 0x0001;
  10. struct PyMethodDef {
  11. const char *ml_name; /* The name of the built-in function/method */
  12. PyCFunction ml_meth; /* The C function that implements it */
  13. int ml_flags; /* Combination of METH_xxx flags, which mostly
  14. describe the args expected by the C func */
  15. const char *ml_doc; /* The __doc__ attribute, or NULL */
  16. };
  17. typedef struct PyMethodDef PyMethodDef;
  18. void __stdcall Py_IncRef(PyObject* object);
  19. void __stdcall Py_DecRef(PyObject* object);
  20. PyObject* __stdcall PyString_FromString(const char *v);
  21. char* PyString_AsString(PyObject *string);
  22. PyObject* PyImport_Import(PyObject *name);
  23. PyObject* __stdcall PyImport_ImportModule(const char *name);
  24. PyObject* __stdcall PyDict_New();
  25. int __stdcall PyDict_SetItemString(PyObject *p, const char *key, PyObject *val);
  26. PyObject* __stdcall PyTuple_New(size_t len);
  27. PyObject* __stdcall PyTuple_GetItem(PyObject *p, size_t pos);
  28. int __stdcall PyTuple_SetItem(PyObject *p, size_t pos, PyObject *obj);
  29. PyObject* __stdcall PyDict_GetItemString(PyObject *p, const char *key);
  30. size_t __stdcall PyTuple_Size(PyObject *p);
  31. size_t PyList_Size(PyObject* list);
  32. PyObject* PyList_GetItem(PyObject *list, size_t index);
  33. PyObject* __stdcall PyCFunction_NewEx(PyMethodDef *, PyObject *, PyObject *);
  34. PyObject* __stdcall PyClass_New(PyObject* className, PyObject* classBases, PyObject* classDict);
  35. PyObject* __stdcall PyMethod_New(PyObject *func, PyObject *self, PyObject *classobj);
  36. PyObject* __stdcall PyInstance_New(PyObject *classobj, PyObject *arg, PyObject *kw);
  37. PyThreadState* __stdcall PyEval_SaveThread();
  38. void __stdcall PyEval_RestoreThread(PyThreadState *tstate);
  39. int __stdcall PySys_SetObject(char *name, PyObject *v);
  40. PyObject* __stdcall PySys_GetObject(char *name);
  41. void __stdcall PySys_SetArgv(int argc, char **argv);
  42. void __stdcall PySys_SetArgv_Py3(int argc, wchar_t **argv);
  43. int __stdcall PyRun_SimpleString(const char* str);
  44. PyObject* __stdcall PyRun_String(const char *str, int start, PyObject *globals, PyObject *locals);
  45. PyObject* PyRun_File(FILE *fp, const char *filename, int start, PyObject *globals, PyObject *locals);
  46. typedef void(*PyCapsule_Destructor)(PyObject *);
  47. PyObject* PyCapsule_New(void *pointer, const char *name, PyCapsule_Destructor destructor);
  48. void* PyCapsule_GetPointer(PyObject *capsule, const char *name);
  49. int PyObject_SetAttrString(PyObject *o, const char *attr_name, PyObject *v);
  50. PyObject* PyObject_GetAttrString(PyObject *o, const char *attr_name);
  51. PyObject* PyObject_CallObject(PyObject *callable_object, PyObject *args);
  52. PyObject* PyObject_Call(PyObject *callable_object, PyObject *args, PyObject *kw);
  53. PyObject* PyUnicode_FromWideChar(const wchar_t *w, size_t size);
  54. PyObject* PyBool_FromLong(long v);
  55. PyObject* Py_None();
  56. PyObject* PyExc_SystemExit();
  57. PyObject* PyType_Type();
  58. PyObject* PyProperty_Type();
  59. void PyErr_Fetch(PyObject **ptype, PyObject **pvalue, PyObject **ptraceback);
  60. void PyErr_NormalizeException(PyObject**exc, PyObject**val, PyObject**tb);
  61. void PyErr_SetString(PyObject *type, const char *message);
  62. void PyErr_Clear();
  63. PyObject* PyFile_FromString(char *filename, char *mode);
  64. FILE* PyFile_AsFile(PyObject *pyfile);
  65. FILE* _Py_fopen(const char* filename, const char* mode);
  66. PyObject* __stdcall PyUnicode_FromString(const char* str);
  67. PyObject* __stdcall PyInstanceMethod_New(PyObject *func);
  68. size_t __stdcall PyUnicode_AsWideChar(PyObject *unicode, wchar_t *w, size_t size);
  69. int __stdcall Py_AddPendingCall(int(*func)(void *), void *arg);
  70. PyGILState_STATE __stdcall PyGILState_Ensure();
  71. void __stdcall PyGILState_Release(PyGILState_STATE);
  72. PyObject* __stdcall PyDescr_NewMethod(PyObject* type, struct PyMethodDef *meth);
  73. bool IsPy3();
  74. class PyObjectRef;
  75. class PyObjectBorrowedRef
  76. {
  77. friend PyObjectRef;
  78. public:
  79. PyObjectBorrowedRef(PyObject* obj)
  80. {
  81. m_obj = obj;
  82. if (m_obj)
  83. Py_IncRef(m_obj);
  84. }
  85. ~PyObjectBorrowedRef()
  86. {
  87. if (m_obj)
  88. Py_DecRef(m_obj);
  89. }
  90. operator PyObject*()
  91. {
  92. return m_obj;
  93. }
  94. private:
  95. PyObjectBorrowedRef(const PyObjectRef& obj) = delete;
  96. PyObject* m_obj;
  97. };
  98. class PyObjectRef
  99. {
  100. public:
  101. PyObjectRef() : m_obj(0)
  102. {}
  103. PyObjectRef(PyObject* obj)
  104. {
  105. m_obj = obj;
  106. }
  107. ~PyObjectRef()
  108. {
  109. if (m_obj)
  110. Py_DecRef(m_obj);
  111. }
  112. operator PyObject*()
  113. {
  114. return m_obj;
  115. }
  116. PyObjectRef& operator= (const PyObjectRef& ref)
  117. {
  118. if (m_obj)
  119. Py_DecRef(m_obj);
  120. m_obj = ref.m_obj;
  121. if (m_obj)
  122. Py_IncRef(m_obj);
  123. return *this;
  124. }
  125. PyObjectRef& operator= (const PyObjectBorrowedRef& ref)
  126. {
  127. if (m_obj)
  128. Py_DecRef(m_obj);
  129. m_obj = ref.m_obj;
  130. if (m_obj)
  131. Py_IncRef(m_obj);
  132. return *this;
  133. }
  134. PyObjectRef& operator= (PyObject* obj)
  135. {
  136. if (m_obj)
  137. Py_DecRef(m_obj);
  138. m_obj = obj;
  139. return *this;
  140. }
  141. private:
  142. PyObjectRef(const PyObjectRef& obj) = delete;
  143. PyObject* m_obj;
  144. };