14710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm/* Descriptors */ 24710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm#ifndef Py_DESCROBJECT_H 34710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm#define Py_DESCROBJECT_H 44710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm#ifdef __cplusplus 54710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmextern "C" { 64710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm#endif 74710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 84710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmtypedef PyObject *(*getter)(PyObject *, void *); 94710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmtypedef int (*setter)(PyObject *, PyObject *, void *); 104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmtypedef struct PyGetSetDef { 124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm char *name; 134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm getter get; 144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm setter set; 154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm char *doc; 164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm void *closure; 174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm} PyGetSetDef; 184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmtypedef PyObject *(*wrapperfunc)(PyObject *self, PyObject *args, 204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm void *wrapped); 214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmtypedef PyObject *(*wrapperfunc_kwds)(PyObject *self, PyObject *args, 234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm void *wrapped, PyObject *kwds); 244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmstruct wrapperbase { 264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm char *name; 274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm int offset; 284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm void *function; 294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm wrapperfunc wrapper; 304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm char *doc; 314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm int flags; 324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm PyObject *name_strobj; 334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm}; 344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm/* Flags for above struct */ 364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm#define PyWrapperFlag_KEYWORDS 1 /* wrapper function takes keyword args */ 374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm/* Various kinds of descriptor objects */ 394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm#define PyDescr_COMMON \ 414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm PyObject_HEAD \ 424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm PyTypeObject *d_type; \ 434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm PyObject *d_name 444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmtypedef struct { 464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm PyDescr_COMMON; 474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm} PyDescrObject; 484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmtypedef struct { 504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm PyDescr_COMMON; 514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm PyMethodDef *d_method; 524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm} PyMethodDescrObject; 534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmtypedef struct { 554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm PyDescr_COMMON; 564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm struct PyMemberDef *d_member; 574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm} PyMemberDescrObject; 584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmtypedef struct { 604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm PyDescr_COMMON; 614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm PyGetSetDef *d_getset; 624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm} PyGetSetDescrObject; 634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmtypedef struct { 654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm PyDescr_COMMON; 664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm struct wrapperbase *d_base; 674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm void *d_wrapped; /* This can be any function pointer */ 684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm} PyWrapperDescrObject; 694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmPyAPI_DATA(PyTypeObject) PyWrapperDescr_Type; 714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmPyAPI_DATA(PyTypeObject) PyDictProxy_Type; 724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmPyAPI_DATA(PyTypeObject) PyGetSetDescr_Type; 734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmPyAPI_DATA(PyTypeObject) PyMemberDescr_Type; 744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmPyAPI_FUNC(PyObject *) PyDescr_NewMethod(PyTypeObject *, PyMethodDef *); 764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmPyAPI_FUNC(PyObject *) PyDescr_NewClassMethod(PyTypeObject *, PyMethodDef *); 774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmPyAPI_FUNC(PyObject *) PyDescr_NewMember(PyTypeObject *, 784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm struct PyMemberDef *); 794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmPyAPI_FUNC(PyObject *) PyDescr_NewGetSet(PyTypeObject *, 804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm struct PyGetSetDef *); 814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmPyAPI_FUNC(PyObject *) PyDescr_NewWrapper(PyTypeObject *, 824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm struct wrapperbase *, void *); 834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm#define PyDescr_IsData(d) (Py_TYPE(d)->tp_descr_set != NULL) 844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmPyAPI_FUNC(PyObject *) PyDictProxy_New(PyObject *); 864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmPyAPI_FUNC(PyObject *) PyWrapper_New(PyObject *, PyObject *); 874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmPyAPI_DATA(PyTypeObject) PyProperty_Type; 904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm#ifdef __cplusplus 914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm} 924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm#endif 934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm#endif /* !Py_DESCROBJECT_H */ 944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 95