mirror of https://github.com/python/cpython
gh-114670: Fix `_testbuffer` module initialization (#114672)
This commit is contained in:
parent
33f56b7432
commit
3a5b38e3b4
|
@ -2816,70 +2816,91 @@ static struct PyModuleDef _testbuffermodule = {
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static int
|
||||||
|
_testbuffer_exec(PyObject *mod)
|
||||||
|
{
|
||||||
|
Py_SET_TYPE(&NDArray_Type, &PyType_Type);
|
||||||
|
if (PyModule_AddType(mod, &NDArray_Type) < 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
Py_SET_TYPE(&StaticArray_Type, &PyType_Type);
|
||||||
|
if (PyModule_AddType(mod, &StaticArray_Type) < 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
structmodule = PyImport_ImportModule("struct");
|
||||||
|
if (structmodule == NULL) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
Struct = PyObject_GetAttrString(structmodule, "Struct");
|
||||||
|
if (Struct == NULL) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
calcsize = PyObject_GetAttrString(structmodule, "calcsize");
|
||||||
|
if (calcsize == NULL) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
simple_format = PyUnicode_FromString(simple_fmt);
|
||||||
|
if (simple_format == NULL) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define ADD_INT_MACRO(mod, macro) \
|
||||||
|
do { \
|
||||||
|
if (PyModule_AddIntConstant(mod, #macro, macro) < 0) { \
|
||||||
|
return -1; \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
ADD_INT_MACRO(mod, ND_MAX_NDIM);
|
||||||
|
ADD_INT_MACRO(mod, ND_VAREXPORT);
|
||||||
|
ADD_INT_MACRO(mod, ND_WRITABLE);
|
||||||
|
ADD_INT_MACRO(mod, ND_FORTRAN);
|
||||||
|
ADD_INT_MACRO(mod, ND_SCALAR);
|
||||||
|
ADD_INT_MACRO(mod, ND_PIL);
|
||||||
|
ADD_INT_MACRO(mod, ND_GETBUF_FAIL);
|
||||||
|
ADD_INT_MACRO(mod, ND_GETBUF_UNDEFINED);
|
||||||
|
ADD_INT_MACRO(mod, ND_REDIRECT);
|
||||||
|
|
||||||
|
ADD_INT_MACRO(mod, PyBUF_SIMPLE);
|
||||||
|
ADD_INT_MACRO(mod, PyBUF_WRITABLE);
|
||||||
|
ADD_INT_MACRO(mod, PyBUF_FORMAT);
|
||||||
|
ADD_INT_MACRO(mod, PyBUF_ND);
|
||||||
|
ADD_INT_MACRO(mod, PyBUF_STRIDES);
|
||||||
|
ADD_INT_MACRO(mod, PyBUF_INDIRECT);
|
||||||
|
ADD_INT_MACRO(mod, PyBUF_C_CONTIGUOUS);
|
||||||
|
ADD_INT_MACRO(mod, PyBUF_F_CONTIGUOUS);
|
||||||
|
ADD_INT_MACRO(mod, PyBUF_ANY_CONTIGUOUS);
|
||||||
|
ADD_INT_MACRO(mod, PyBUF_FULL);
|
||||||
|
ADD_INT_MACRO(mod, PyBUF_FULL_RO);
|
||||||
|
ADD_INT_MACRO(mod, PyBUF_RECORDS);
|
||||||
|
ADD_INT_MACRO(mod, PyBUF_RECORDS_RO);
|
||||||
|
ADD_INT_MACRO(mod, PyBUF_STRIDED);
|
||||||
|
ADD_INT_MACRO(mod, PyBUF_STRIDED_RO);
|
||||||
|
ADD_INT_MACRO(mod, PyBUF_CONTIG);
|
||||||
|
ADD_INT_MACRO(mod, PyBUF_CONTIG_RO);
|
||||||
|
|
||||||
|
ADD_INT_MACRO(mod, PyBUF_READ);
|
||||||
|
ADD_INT_MACRO(mod, PyBUF_WRITE);
|
||||||
|
|
||||||
|
#undef ADD_INT_MACRO
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
PyMODINIT_FUNC
|
PyMODINIT_FUNC
|
||||||
PyInit__testbuffer(void)
|
PyInit__testbuffer(void)
|
||||||
{
|
{
|
||||||
PyObject *m;
|
PyObject *mod = PyModule_Create(&_testbuffermodule);
|
||||||
|
if (mod == NULL) {
|
||||||
m = PyModule_Create(&_testbuffermodule);
|
|
||||||
if (m == NULL)
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
Py_SET_TYPE(&NDArray_Type, &PyType_Type);
|
if (_testbuffer_exec(mod) < 0) {
|
||||||
Py_INCREF(&NDArray_Type);
|
Py_DECREF(mod);
|
||||||
PyModule_AddObject(m, "ndarray", (PyObject *)&NDArray_Type);
|
|
||||||
|
|
||||||
Py_SET_TYPE(&StaticArray_Type, &PyType_Type);
|
|
||||||
Py_INCREF(&StaticArray_Type);
|
|
||||||
PyModule_AddObject(m, "staticarray", (PyObject *)&StaticArray_Type);
|
|
||||||
|
|
||||||
structmodule = PyImport_ImportModule("struct");
|
|
||||||
if (structmodule == NULL)
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
Struct = PyObject_GetAttrString(structmodule, "Struct");
|
return mod;
|
||||||
calcsize = PyObject_GetAttrString(structmodule, "calcsize");
|
|
||||||
if (Struct == NULL || calcsize == NULL)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
simple_format = PyUnicode_FromString(simple_fmt);
|
|
||||||
if (simple_format == NULL)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
PyModule_AddIntMacro(m, ND_MAX_NDIM);
|
|
||||||
PyModule_AddIntMacro(m, ND_VAREXPORT);
|
|
||||||
PyModule_AddIntMacro(m, ND_WRITABLE);
|
|
||||||
PyModule_AddIntMacro(m, ND_FORTRAN);
|
|
||||||
PyModule_AddIntMacro(m, ND_SCALAR);
|
|
||||||
PyModule_AddIntMacro(m, ND_PIL);
|
|
||||||
PyModule_AddIntMacro(m, ND_GETBUF_FAIL);
|
|
||||||
PyModule_AddIntMacro(m, ND_GETBUF_UNDEFINED);
|
|
||||||
PyModule_AddIntMacro(m, ND_REDIRECT);
|
|
||||||
|
|
||||||
PyModule_AddIntMacro(m, PyBUF_SIMPLE);
|
|
||||||
PyModule_AddIntMacro(m, PyBUF_WRITABLE);
|
|
||||||
PyModule_AddIntMacro(m, PyBUF_FORMAT);
|
|
||||||
PyModule_AddIntMacro(m, PyBUF_ND);
|
|
||||||
PyModule_AddIntMacro(m, PyBUF_STRIDES);
|
|
||||||
PyModule_AddIntMacro(m, PyBUF_INDIRECT);
|
|
||||||
PyModule_AddIntMacro(m, PyBUF_C_CONTIGUOUS);
|
|
||||||
PyModule_AddIntMacro(m, PyBUF_F_CONTIGUOUS);
|
|
||||||
PyModule_AddIntMacro(m, PyBUF_ANY_CONTIGUOUS);
|
|
||||||
PyModule_AddIntMacro(m, PyBUF_FULL);
|
|
||||||
PyModule_AddIntMacro(m, PyBUF_FULL_RO);
|
|
||||||
PyModule_AddIntMacro(m, PyBUF_RECORDS);
|
|
||||||
PyModule_AddIntMacro(m, PyBUF_RECORDS_RO);
|
|
||||||
PyModule_AddIntMacro(m, PyBUF_STRIDED);
|
|
||||||
PyModule_AddIntMacro(m, PyBUF_STRIDED_RO);
|
|
||||||
PyModule_AddIntMacro(m, PyBUF_CONTIG);
|
|
||||||
PyModule_AddIntMacro(m, PyBUF_CONTIG_RO);
|
|
||||||
|
|
||||||
PyModule_AddIntMacro(m, PyBUF_READ);
|
|
||||||
PyModule_AddIntMacro(m, PyBUF_WRITE);
|
|
||||||
|
|
||||||
return m;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue