1 /* Author: Lisandro Dalcin */
2 /* Contact: dalcinl@gmail.com */
3
4 /* -------------------------------------------------------------------------- */
5
6 #if defined(Py_LIMITED_API) && Py_LIMITED_API+0 < 0x030B0000
7
8 #define Py_bf_getbuffer 1
9 #define Py_bf_releasebuffer 2
10
11 typedef struct {
12 void *buf;
13 PyObject *obj;
14 Py_ssize_t len;
15 Py_ssize_t itemsize;
16 int readonly;
17 int ndim;
18 char *format;
19 Py_ssize_t *shape;
20 Py_ssize_t *strides;
21 Py_ssize_t *suboffsets;
22 void *internal;
23 } Py_buffer;
24
25 #define PyBUF_SIMPLE 0
26 #define PyBUF_WRITABLE 0x0001
27
28 #define PyBUF_FORMAT 0x0004
29 #define PyBUF_ND 0x0008
30 #define PyBUF_STRIDES (0x0010 | PyBUF_ND)
31 #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES)
32 #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES)
33 #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES)
34 #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES)
35
36 #define PyBUF_CONTIG (PyBUF_ND | PyBUF_WRITABLE)
37 #define PyBUF_CONTIG_RO (PyBUF_ND)
38
39 #define PyBUF_STRIDED (PyBUF_STRIDES | PyBUF_WRITABLE)
40 #define PyBUF_STRIDED_RO (PyBUF_STRIDES)
41
42 #define PyBUF_RECORDS (PyBUF_STRIDES | PyBUF_WRITABLE | PyBUF_FORMAT)
43 #define PyBUF_RECORDS_RO (PyBUF_STRIDES | PyBUF_FORMAT)
44
45 #define PyBUF_FULL (PyBUF_INDIRECT | PyBUF_WRITABLE | PyBUF_FORMAT)
46 #define PyBUF_FULL_RO (PyBUF_INDIRECT | PyBUF_FORMAT)
47
48 #define PyBUF_READ 0x100
49 #define PyBUF_WRITE 0x200
50
51 PyAPI_FUNC(int) PyObject_CheckBuffer(PyObject *);
52 PyAPI_FUNC(int) PyObject_GetBuffer(PyObject *, Py_buffer *, int);
53 PyAPI_FUNC(void) PyBuffer_Release(Py_buffer *);
54 PyAPI_FUNC(int) PyBuffer_FillInfo(Py_buffer *, PyObject *,
55 void *, Py_ssize_t, int, int);
56
57 #endif
58
59 /* -------------------------------------------------------------------------- */
60
61 #if (defined(Py_LIMITED_API) && Py_LIMITED_API+0 < 0x030C0000) || PY_VERSION_HEX < 0X30C0000
62
63 #define PyErr_GetRaisedException PyErr_GetRaisedException_312
PyErr_GetRaisedException(void)64 static PyObject *PyErr_GetRaisedException(void)
65 {
66 PyObject *t, *v, *tb;
67 PyErr_Fetch(&t, &v, &tb);
68 PyErr_NormalizeException(&t, &v, &tb);
69 if (tb != NULL) PyException_SetTraceback(v, tb);
70 Py_XDECREF(t);
71 Py_XDECREF(tb);
72 return v;
73 }
74
75 #define PyErr_SetRaisedException PyErr_SetRaisedException_312
PyErr_SetRaisedException_312(PyObject * v)76 static void PyErr_SetRaisedException_312(PyObject *v)
77 {
78 PyObject *t = (PyObject *)Py_TYPE(v);
79 PyObject *tb = PyException_GetTraceback(v);
80 Py_XINCREF(t);
81 Py_XINCREF(tb);
82 PyErr_Restore(t, v, tb);
83 }
84
85 #endif
86
87 /* -------------------------------------------------------------------------- */
88