diff options
author | Victor Stinner <vstinner@python.org> | 2022-01-26 16:32:47 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-26 16:32:47 (GMT) |
commit | d4a85f104bf9d2e368f25c9a567eaaa2cc39a96a (patch) | |
tree | 6683db789d0c867d8775e59b876b08e79230b705 /Include/cpython | |
parent | 3eb3b4f270757f66c7fb6dcf5afa416ee1582a4b (diff) | |
download | cpython-d4a85f104bf9d2e368f25c9a567eaaa2cc39a96a.zip cpython-d4a85f104bf9d2e368f25c9a567eaaa2cc39a96a.tar.gz cpython-d4a85f104bf9d2e368f25c9a567eaaa2cc39a96a.tar.bz2 |
bpo-35134: Add Include/cpython/descrobject.h (GH-30923)
Move Include/descrobject.h non-limited API to a new
Include/cpython/descrobject.h header file.
Diffstat (limited to 'Include/cpython')
-rw-r--r-- | Include/cpython/descrobject.h | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/Include/cpython/descrobject.h b/Include/cpython/descrobject.h new file mode 100644 index 0000000..5d6c3a2 --- /dev/null +++ b/Include/cpython/descrobject.h @@ -0,0 +1,64 @@ +#ifndef Py_CPYTHON_DESCROBJECT_H +# error "this header file must not be included directly" +#endif + +typedef PyObject *(*wrapperfunc)(PyObject *self, PyObject *args, + void *wrapped); + +typedef PyObject *(*wrapperfunc_kwds)(PyObject *self, PyObject *args, + void *wrapped, PyObject *kwds); + +struct wrapperbase { + const char *name; + int offset; + void *function; + wrapperfunc wrapper; + const 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 */ + +typedef struct { + PyObject_HEAD + PyTypeObject *d_type; + PyObject *d_name; + PyObject *d_qualname; +} PyDescrObject; + +#define PyDescr_COMMON PyDescrObject d_common + +#define PyDescr_TYPE(x) (((PyDescrObject *)(x))->d_type) +#define PyDescr_NAME(x) (((PyDescrObject *)(x))->d_name) + +typedef struct { + PyDescr_COMMON; + PyMethodDef *d_method; + vectorcallfunc vectorcall; +} 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) _PyMethodWrapper_Type; + +PyAPI_FUNC(PyObject *) PyDescr_NewWrapper(PyTypeObject *, + struct wrapperbase *, void *); +PyAPI_FUNC(int) PyDescr_IsData(PyObject *); |