File: /Users/paulross/dev/Python-3.6.2/Include/descrobject.h

Green shading in the line number column means the source is part of the translation unit, red means it is conditionally excluded. Highlighted line numbers link to the translation unit page. Highlighted macros link to the macro page.

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