blob: b79c2faacc87ff5a2fed6d540638b11c7024abfa [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
17struct wrapperbase {
18 char *name;
19 wrapperfunc wrapper;
20 char *doc;
21};
22
Guido van Rossumf4593e02001-10-03 12:09:30 +000023/* Various kinds of descriptor objects */
24
25#define PyDescr_COMMON \
26 PyObject_HEAD \
27 PyTypeObject *d_type; \
28 PyObject *d_name
29
30typedef struct {
31 PyDescr_COMMON;
32} PyDescrObject;
33
34typedef struct {
35 PyDescr_COMMON;
36 PyMethodDef *d_method;
37} PyMethodDescrObject;
38
39typedef struct {
40 PyDescr_COMMON;
41 struct PyMemberDef *d_member;
42} PyMemberDescrObject;
43
44typedef struct {
45 PyDescr_COMMON;
46 PyGetSetDef *d_getset;
47} PyGetSetDescrObject;
48
49typedef struct {
50 PyDescr_COMMON;
51 struct wrapperbase *d_base;
52 void *d_wrapped; /* This can be any function pointer */
53} PyWrapperDescrObject;
54
55extern DL_IMPORT(PyTypeObject) PyWrapperDescr_Type;
56
Tim Peters6d6c1a32001-08-02 04:15:00 +000057extern DL_IMPORT(PyObject *) PyDescr_NewMethod(PyTypeObject *, PyMethodDef *);
58extern DL_IMPORT(PyObject *) PyDescr_NewMember(PyTypeObject *,
Guido van Rossum6f799372001-09-20 20:46:19 +000059 struct PyMemberDef *);
Tim Peters6d6c1a32001-08-02 04:15:00 +000060extern DL_IMPORT(PyObject *) PyDescr_NewGetSet(PyTypeObject *,
Guido van Rossum32d34c82001-09-20 21:45:26 +000061 struct PyGetSetDef *);
Tim Peters6d6c1a32001-08-02 04:15:00 +000062extern DL_IMPORT(PyObject *) PyDescr_NewWrapper(PyTypeObject *,
63 struct wrapperbase *, void *);
64extern DL_IMPORT(int) PyDescr_IsData(PyObject *);
65
66extern DL_IMPORT(PyObject *) PyDictProxy_New(PyObject *);
67extern DL_IMPORT(PyObject *) PyWrapper_New(PyObject *, PyObject *);
Guido van Rossum29a62dd2001-08-23 21:40:38 +000068
69
Guido van Rossum8bce4ac2001-09-06 21:56:42 +000070extern DL_IMPORT(PyTypeObject) PyProperty_Type;