summaryrefslogtreecommitdiffstats
path: root/Include/cpython
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2022-01-26 16:32:47 (GMT)
committerGitHub <noreply@github.com>2022-01-26 16:32:47 (GMT)
commitd4a85f104bf9d2e368f25c9a567eaaa2cc39a96a (patch)
tree6683db789d0c867d8775e59b876b08e79230b705 /Include/cpython
parent3eb3b4f270757f66c7fb6dcf5afa416ee1582a4b (diff)
downloadcpython-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.h64
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 *);