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