blob: 918dd5a0420de413978319c047af1788edceedf6 [file] [log] [blame]
Guido van Rossum32d34c82001-09-20 21:45:26 +00001/* Descriptors */
Tim Peters6d6c1a32001-08-02 04:15:00 +00002
3typedef PyObject *(*getter)(PyObject *, void *);
4typedef int (*setter)(PyObject *, PyObject *, void *);
5
Guido van Rossum32d34c82001-09-20 21:45:26 +00006typedef struct PyGetSetDef {
Tim Peters6d6c1a32001-08-02 04:15:00 +00007 char *name;
8 getter get;
9 setter set;
Guido van Rossum32d34c82001-09-20 21:45:26 +000010 char *doc;
Tim Peters6d6c1a32001-08-02 04:15:00 +000011 void *closure;
Guido van Rossum32d34c82001-09-20 21:45:26 +000012} PyGetSetDef;
Tim Peters6d6c1a32001-08-02 04:15:00 +000013
14typedef PyObject *(*wrapperfunc)(PyObject *self, PyObject *args,
15 void *wrapped);
16
Guido van Rossumc8e56452001-10-22 00:43:43 +000017typedef PyObject *(*wrapperfunc_kwds)(PyObject *self, PyObject *args,
18 void *wrapped, PyObject *kwds);
19
Tim Peters6d6c1a32001-08-02 04:15:00 +000020struct wrapperbase {
21 char *name;
Guido van Rossum6d204072001-10-21 00:44:31 +000022 int offset;
23 void *function;
Tim Peters6d6c1a32001-08-02 04:15:00 +000024 wrapperfunc wrapper;
25 char *doc;
Guido van Rossumc8e56452001-10-22 00:43:43 +000026 int flags;
Guido van Rossum6d204072001-10-21 00:44:31 +000027 PyObject *name_strobj;
Tim Peters6d6c1a32001-08-02 04:15:00 +000028};
29
Guido van Rossumc8e56452001-10-22 00:43:43 +000030/* Flags for above struct */
31#define PyWrapperFlag_KEYWORDS 1 /* wrapper function takes keyword args */
32
Guido van Rossumf4593e02001-10-03 12:09:30 +000033/* Various kinds of descriptor objects */
34
35#define PyDescr_COMMON \
36 PyObject_HEAD \
37 PyTypeObject *d_type; \
38 PyObject *d_name
39
40typedef struct {
41 PyDescr_COMMON;
42} PyDescrObject;
43
44typedef struct {
45 PyDescr_COMMON;
46 PyMethodDef *d_method;
47} PyMethodDescrObject;
48
49typedef struct {
50 PyDescr_COMMON;
51 struct PyMemberDef *d_member;
52} PyMemberDescrObject;
53
54typedef struct {
55 PyDescr_COMMON;
56 PyGetSetDef *d_getset;
57} PyGetSetDescrObject;
58
59typedef struct {
60 PyDescr_COMMON;
61 struct wrapperbase *d_base;
62 void *d_wrapped; /* This can be any function pointer */
63} PyWrapperDescrObject;
64
65extern DL_IMPORT(PyTypeObject) PyWrapperDescr_Type;
66
Tim Peters6d6c1a32001-08-02 04:15:00 +000067extern DL_IMPORT(PyObject *) PyDescr_NewMethod(PyTypeObject *, PyMethodDef *);
68extern DL_IMPORT(PyObject *) PyDescr_NewMember(PyTypeObject *,
Guido van Rossum6f799372001-09-20 20:46:19 +000069 struct PyMemberDef *);
Tim Peters6d6c1a32001-08-02 04:15:00 +000070extern DL_IMPORT(PyObject *) PyDescr_NewGetSet(PyTypeObject *,
Guido van Rossum32d34c82001-09-20 21:45:26 +000071 struct PyGetSetDef *);
Tim Peters6d6c1a32001-08-02 04:15:00 +000072extern DL_IMPORT(PyObject *) PyDescr_NewWrapper(PyTypeObject *,
73 struct wrapperbase *, void *);
74extern DL_IMPORT(int) PyDescr_IsData(PyObject *);
75
76extern DL_IMPORT(PyObject *) PyDictProxy_New(PyObject *);
77extern DL_IMPORT(PyObject *) PyWrapper_New(PyObject *, PyObject *);
Guido van Rossum29a62dd2001-08-23 21:40:38 +000078
79
Guido van Rossum8bce4ac2001-09-06 21:56:42 +000080extern DL_IMPORT(PyTypeObject) PyProperty_Type;