1#ifndef Py_CPYTHON_DESCROBJECT_H
2# error "this header file must not be included directly"
3#endif
4
5typedef PyObject *(*wrapperfunc)(PyObject *self, PyObject *args,
6 void *wrapped);
7
8typedef PyObject *(*wrapperfunc_kwds)(PyObject *self, PyObject *args,
9 void *wrapped, PyObject *kwds);
10
11struct wrapperbase {
12 const char *name;
13 int offset;
14 void *function;
15 wrapperfunc wrapper;
16 const char *doc;
17 int flags;
18 PyObject *name_strobj;
19};
20
21/* Flags for above struct */
22#define PyWrapperFlag_KEYWORDS 1 /* wrapper function takes keyword args */
23
24/* Various kinds of descriptor objects */
25
26typedef struct {
27 PyObject_HEAD
28 PyTypeObject *d_type;
29 PyObject *d_name;
30 PyObject *d_qualname;
31} PyDescrObject;
32
33#define PyDescr_COMMON PyDescrObject d_common
34
35#define PyDescr_TYPE(x) (((PyDescrObject *)(x))->d_type)
36#define PyDescr_NAME(x) (((PyDescrObject *)(x))->d_name)
37
38typedef struct {
39 PyDescr_COMMON;
40 PyMethodDef *d_method;
41 vectorcallfunc vectorcall;
42} PyMethodDescrObject;
43
44typedef struct {
45 PyDescr_COMMON;
46 PyMemberDef *d_member;
47} PyMemberDescrObject;
48
49typedef struct {
50 PyDescr_COMMON;
51 PyGetSetDef *d_getset;
52} PyGetSetDescrObject;
53
54typedef struct {
55 PyDescr_COMMON;
56 struct wrapperbase *d_base;
57 void *d_wrapped; /* This can be any function pointer */
58} PyWrapperDescrObject;
59
60PyAPI_DATA(PyTypeObject) _PyMethodWrapper_Type;
61
62PyAPI_FUNC(PyObject *) PyDescr_NewWrapper(PyTypeObject *,
63 struct wrapperbase *, void *);
64PyAPI_FUNC(int) PyDescr_IsData(PyObject *);
65

source code of include/python3.12/cpython/descrobject.h