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