You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

104 lines
2.8 KiB

  1. /* Descriptors */
  2. #ifndef Py_DESCROBJECT_H
  3. #define Py_DESCROBJECT_H
  4. #ifdef __cplusplus
  5. extern "C" {
  6. #endif
  7. typedef PyObject *(*getter)(PyObject *, void *);
  8. typedef int (*setter)(PyObject *, PyObject *, void *);
  9. typedef struct PyGetSetDef {
  10. char *name;
  11. getter get;
  12. setter set;
  13. char *doc;
  14. void *closure;
  15. } PyGetSetDef;
  16. #ifndef Py_LIMITED_API
  17. typedef PyObject *(*wrapperfunc)(PyObject *self, PyObject *args,
  18. void *wrapped);
  19. typedef PyObject *(*wrapperfunc_kwds)(PyObject *self, PyObject *args,
  20. void *wrapped, PyObject *kwds);
  21. struct wrapperbase {
  22. char *name;
  23. int offset;
  24. void *function;
  25. wrapperfunc wrapper;
  26. char *doc;
  27. int flags;
  28. PyObject *name_strobj;
  29. };
  30. /* Flags for above struct */
  31. #define PyWrapperFlag_KEYWORDS 1 /* wrapper function takes keyword args */
  32. /* Various kinds of descriptor objects */
  33. typedef struct {
  34. PyObject_HEAD
  35. PyTypeObject *d_type;
  36. PyObject *d_name;
  37. } PyDescrObject;
  38. #define PyDescr_COMMON PyDescrObject d_common
  39. #define PyDescr_TYPE(x) (((PyDescrObject *)(x))->d_type)
  40. #define PyDescr_NAME(x) (((PyDescrObject *)(x))->d_name)
  41. typedef struct {
  42. PyDescr_COMMON;
  43. PyMethodDef *d_method;
  44. } PyMethodDescrObject;
  45. typedef struct {
  46. PyDescr_COMMON;
  47. struct PyMemberDef *d_member;
  48. } PyMemberDescrObject;
  49. typedef struct {
  50. PyDescr_COMMON;
  51. PyGetSetDef *d_getset;
  52. } PyGetSetDescrObject;
  53. typedef struct {
  54. PyDescr_COMMON;
  55. struct wrapperbase *d_base;
  56. void *d_wrapped; /* This can be any function pointer */
  57. } PyWrapperDescrObject;
  58. #endif /* Py_LIMITED_API */
  59. PyAPI_DATA(PyTypeObject) PyClassMethodDescr_Type;
  60. PyAPI_DATA(PyTypeObject) PyGetSetDescr_Type;
  61. PyAPI_DATA(PyTypeObject) PyMemberDescr_Type;
  62. PyAPI_DATA(PyTypeObject) PyMethodDescr_Type;
  63. PyAPI_DATA(PyTypeObject) PyWrapperDescr_Type;
  64. PyAPI_DATA(PyTypeObject) PyDictProxy_Type;
  65. PyAPI_DATA(PyTypeObject) _PyMethodWrapper_Type;
  66. PyAPI_FUNC(PyObject *) PyDescr_NewMethod(PyTypeObject *, PyMethodDef *);
  67. PyAPI_FUNC(PyObject *) PyDescr_NewClassMethod(PyTypeObject *, PyMethodDef *);
  68. struct PyMemberDef; /* forward declaration for following prototype */
  69. PyAPI_FUNC(PyObject *) PyDescr_NewMember(PyTypeObject *,
  70. struct PyMemberDef *);
  71. PyAPI_FUNC(PyObject *) PyDescr_NewGetSet(PyTypeObject *,
  72. struct PyGetSetDef *);
  73. #ifndef Py_LIMITED_API
  74. PyAPI_FUNC(PyObject *) PyDescr_NewWrapper(PyTypeObject *,
  75. struct wrapperbase *, void *);
  76. #define PyDescr_IsData(d) (Py_TYPE(d)->tp_descr_set != NULL)
  77. #endif
  78. PyAPI_FUNC(PyObject *) PyDictProxy_New(PyObject *);
  79. PyAPI_FUNC(PyObject *) PyWrapper_New(PyObject *, PyObject *);
  80. PyAPI_DATA(PyTypeObject) PyProperty_Type;
  81. #ifdef __cplusplus
  82. }
  83. #endif
  84. #endif /* !Py_DESCROBJECT_H */