Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
allendowney
GitHub Repository: allendowney/cpython
Path: blob/main/Include/descrobject.h
12 views
1
/* Descriptors */
2
#ifndef Py_DESCROBJECT_H
3
#define Py_DESCROBJECT_H
4
#ifdef __cplusplus
5
extern "C" {
6
#endif
7
8
typedef PyObject *(*getter)(PyObject *, void *);
9
typedef int (*setter)(PyObject *, PyObject *, void *);
10
11
struct PyGetSetDef {
12
const char *name;
13
getter get;
14
setter set;
15
const char *doc;
16
void *closure;
17
};
18
19
PyAPI_DATA(PyTypeObject) PyClassMethodDescr_Type;
20
PyAPI_DATA(PyTypeObject) PyGetSetDescr_Type;
21
PyAPI_DATA(PyTypeObject) PyMemberDescr_Type;
22
PyAPI_DATA(PyTypeObject) PyMethodDescr_Type;
23
PyAPI_DATA(PyTypeObject) PyWrapperDescr_Type;
24
PyAPI_DATA(PyTypeObject) PyDictProxy_Type;
25
PyAPI_DATA(PyTypeObject) PyProperty_Type;
26
27
PyAPI_FUNC(PyObject *) PyDescr_NewMethod(PyTypeObject *, PyMethodDef *);
28
PyAPI_FUNC(PyObject *) PyDescr_NewClassMethod(PyTypeObject *, PyMethodDef *);
29
PyAPI_FUNC(PyObject *) PyDescr_NewMember(PyTypeObject *, PyMemberDef *);
30
PyAPI_FUNC(PyObject *) PyDescr_NewGetSet(PyTypeObject *, PyGetSetDef *);
31
32
PyAPI_FUNC(PyObject *) PyDictProxy_New(PyObject *);
33
PyAPI_FUNC(PyObject *) PyWrapper_New(PyObject *, PyObject *);
34
35
36
/* An array of PyMemberDef structures defines the name, type and offset
37
of selected members of a C structure. These can be read by
38
PyMember_GetOne() and set by PyMember_SetOne() (except if their READONLY
39
flag is set). The array must be terminated with an entry whose name
40
pointer is NULL. */
41
struct PyMemberDef {
42
const char *name;
43
int type;
44
Py_ssize_t offset;
45
int flags;
46
const char *doc;
47
};
48
49
// These constants used to be in structmember.h, not prefixed by Py_.
50
// (structmember.h now has aliases to the new names.)
51
52
/* Types */
53
#define Py_T_SHORT 0
54
#define Py_T_INT 1
55
#define Py_T_LONG 2
56
#define Py_T_FLOAT 3
57
#define Py_T_DOUBLE 4
58
#define Py_T_STRING 5
59
#define _Py_T_OBJECT 6 // Deprecated, use Py_T_OBJECT_EX instead
60
/* the ordering here is weird for binary compatibility */
61
#define Py_T_CHAR 7 /* 1-character string */
62
#define Py_T_BYTE 8 /* 8-bit signed int */
63
/* unsigned variants: */
64
#define Py_T_UBYTE 9
65
#define Py_T_USHORT 10
66
#define Py_T_UINT 11
67
#define Py_T_ULONG 12
68
69
/* Added by Jack: strings contained in the structure */
70
#define Py_T_STRING_INPLACE 13
71
72
/* Added by Lillo: bools contained in the structure (assumed char) */
73
#define Py_T_BOOL 14
74
75
#define Py_T_OBJECT_EX 16
76
#define Py_T_LONGLONG 17
77
#define Py_T_ULONGLONG 18
78
79
#define Py_T_PYSSIZET 19 /* Py_ssize_t */
80
#define _Py_T_NONE 20 // Deprecated. Value is always None.
81
82
/* Flags */
83
#define Py_READONLY 1
84
#define Py_AUDIT_READ 2 // Added in 3.10, harmless no-op before that
85
#define _Py_WRITE_RESTRICTED 4 // Deprecated, no-op. Do not reuse the value.
86
#define Py_RELATIVE_OFFSET 8
87
88
PyAPI_FUNC(PyObject *) PyMember_GetOne(const char *, PyMemberDef *);
89
PyAPI_FUNC(int) PyMember_SetOne(char *, PyMemberDef *, PyObject *);
90
91
#ifndef Py_LIMITED_API
92
# define Py_CPYTHON_DESCROBJECT_H
93
# include "cpython/descrobject.h"
94
# undef Py_CPYTHON_DESCROBJECT_H
95
#endif
96
97
#ifdef __cplusplus
98
}
99
#endif
100
#endif /* !Py_DESCROBJECT_H */
101
102