8000 gh-114670: Fix `_testbuffer` module initialization (#114672) · miss-islington/cpython@3a5b38e · GitHub
[go: up one dir, main page]

Skip to content

Commit 3a5b38e

Browse files
authored
pythongh-114670: Fix _testbuffer module initialization (python#114672)
1 parent 33f56b7 commit 3a5b38e

File tree

1 file changed

+74
-53
lines changed

1 file changed

+74
-53
lines changed

Modules/_testbuffer.c

Lines changed: 74 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -2816,70 +2816,91 @@ static struct PyModuleDef _testbuffermodule = {
28162816
NULL
28172817
};
28182818

2819-
2820-
PyMODINIT_FUNC
2821-
PyInit__testbuffer(void)
2819+
static int
2820+
_testbuffer_exec(PyObject *mod)
28222821
{
2823-
PyObject *m;
2824-
2825-
m = PyModule_Create(&_testbuffermodule);
2826-
if (m == NULL)
2827-
return NULL;
2828-
28292822
Py_SET_TYPE(&NDArray_Type, &PyType_Type);
2830-
Py_INCREF(&NDArray_Type);
2831-
PyModule_AddObject(m, "ndarray", (PyObject *)&NDArray_Type);
2823+
if (PyModule_AddType(mod, &NDArray_Type) < 0) {
2824+
return -1;
2825+
}
28322826

28332827
Py_SET_TYPE(&StaticArray_Type, &PyType_Type);
2834-
Py_INCREF(&StaticArray_Type);
2835-
PyModule_AddObject(m, "staticarray", (PyObject *)&StaticArray_Type);
2828+
if (PyModule_AddType(mod, &StaticArray_Type) < 0) {
2829+
return -1;
2830+
}
28362831

28372832
structmodule = PyImport_ImportModule("struct");
2838-
if (structmodule == NULL)
2839-
return NULL;
2833+
if (structmodule == NULL) {
2834+
return -1;
2835+
}
28402836

28412837
Struct = PyObject_GetAttrString(structmodule, "Struct");
2838+
if (Struct == NULL) {
2839+
return -1;
2840+
}
28422841
calcsize = PyObject_GetAttrString(structmodule, "calcsize");
2843-
if (Struct == NULL || calcsize == NULL)
2844-
return NULL;
2842+
if (calcsize == NULL) {
2843+
return -1;
2844+
}
28452845

28462846
simple_format = PyUnicode_FromString(simple_fmt);
2847-
if (simple_format == NULL)
2848-
return NULL;
2849-
2850-
PyModule_AddIntMacro(m, ND_MAX_NDIM);
2851-
PyModule_AddIntMacro(m, ND_VAREXPORT);
2852-
PyModule_AddIntMacro(m, ND_WRITABLE);
2853-
PyModule_AddIntMacro(m, ND_FORTRAN);
2854-
PyModule_AddIntMacro(m, ND_SCALAR);
2855-
PyModule_AddIntMacro(m, ND_PIL);
2856-
PyModule_AddIntMacro(m, ND_GETBUF_FAIL);
2857-
PyModule_AddIntMacro(m, ND_GETBUF_UNDEFINED);
2858-
PyModule_AddIntMacro(m, ND_REDIRECT);
2859-
2860-
PyModule_AddIntMacro(m, PyBUF_SIMPLE);
2861-
PyModule_AddIntMacro(m, PyBUF_WRITABLE);
2862-
PyModule_AddIntMacro(m, PyBUF_FORMAT);
2863-
PyModule_AddIntMacro(m, PyBUF_ND);
2864-
PyModule_AddIntMacro(m, PyBUF_STRIDES);
2865-
PyModule_AddIntMacro(m, PyBUF_INDIRECT);
2866-
PyModule_AddIntMacro(m, PyBUF_C_CONTIGUOUS);
2867-
PyModule_AddIntMacro(m, PyBUF_F_CONTIGUOUS);
2868-
PyModule_AddIntMacro(m, PyBUF_ANY_CONTIGUOUS);
2869-
PyModule_AddIntMacro(m, PyBUF_FULL);
2870-
PyModule_AddIntMacro(m, PyBUF_FULL_RO);
2871-
PyModule_AddIntMacro(m, PyBUF_RECORDS);
2872-
PyModule_AddIntMacro(m, PyBUF_RECORDS_RO);
2873-
PyModule_AddIntMacro(m, PyBUF_STRIDED);
2874-
PyModule_AddIntMacro(m, PyBUF_STRIDED_RO);
2875-
PyModule_AddIntMacro(m, PyBUF_CONTIG);
2876-
PyModule_AddIntMacro(m, PyBUF_CONTIG_RO);
2877-
2878-
PyModule_AddIntMacro(m, PyBUF_READ);
2879-
PyModule_AddIntMacro(m, PyBUF_WRITE);
2880-
2881-
return m;
2882-
}
2847+
if (simple_format == NULL) {
2848+
return -1;
2849+
}
28832850

2851+
#define ADD_INT_MACRO(mod, macro) \
2852+
do { \
2853+
if (PyModule_AddIntConstant(mod, #macro, macro) < 0) { \
2854+
return -1; \
2855+
} \
2856+
} while (0)
2857+
2858+
ADD_INT_MACRO(mod, ND_MAX_NDIM);
2859+
ADD_INT_MACRO(mod, ND_VAREXPORT);
2860+
ADD_INT_MACRO(mod, ND_WRITABLE);
2861+
ADD_INT_MACRO(mod, ND_FORTRAN);
2862+
ADD_INT_MACRO(mod, ND_SCALAR);
2863+
ADD_INT_MACRO(mod, ND_PIL);
2864+
ADD_INT_MACRO(mod, ND_GETBUF_FAIL);
2865+
ADD_INT_MACRO(mod, ND_GETBUF_UNDEFINED);
2866+
ADD_INT_MACRO(mod, ND_REDIRECT);
2867+
2868+
ADD_INT_MACRO(mod, PyBUF_SIMPLE);
2869+
ADD_INT_MACRO(mod, PyBUF_WRITABLE);
2870+
ADD_INT_MACRO(mod, PyBUF_FORMAT);
2871+
ADD_INT_MACRO(mod, PyBUF_ND);
2872+
ADD_INT_MACRO(mod, PyBUF_STRIDES);
2873+
ADD_INT_MACRO(mod, PyBUF_INDIRECT);
2874+
ADD_INT_MACRO(mod, PyBUF_C_CONTIGUOUS);
2875+
ADD_INT_MACRO(mod, PyBUF_F_CONTIGUOUS);
2876+
ADD_INT_MACRO(mod, PyBUF_ANY_CONTIGUOUS);
2877+
ADD_INT_MACRO(mod, PyBUF_FULL);
2878+
ADD_INT_MACRO(mod, PyBUF_FULL_RO);
2879+
ADD_INT_MACRO(mod, PyBUF_RECORDS);
2880+
ADD_INT_MACRO(mod, PyBUF_RECORDS_RO);
2881+
ADD_INT_MACRO(mod, PyBUF_STRIDED);
2882+
ADD_INT_MACRO(mod, PyBUF_STRIDED_RO);
2883+
ADD_INT_MACRO(mod, PyBUF_CONTIG);
2884+
ADD_INT_MACRO(mod, PyBUF_CONTIG_RO);
2885+
2886+
ADD_INT_MACRO(mod, PyBUF_READ);
2887+
ADD_INT_MACRO(mod, PyBUF_WRITE);
2888+
2889+
#undef ADD_INT_MACRO
28842890

2891+
return 0;
2892+
}
28852893

2894+
PyMODINIT_FUNC
2895+
PyInit__testbuffer(void)
2896+
{
2897+
PyObject *mod = PyModule_Create(&_testbuffermodule);
2898+
if (mod == NULL) {
2899+
return NULL;
2900+
}
2901+
if (_testbuffer_exec(mod) < 0) {
2902+
Py_DECREF(mod);
2903+
return NULL;
2904+
}
2905+
return mod;
2906+
}

0 commit comments

Comments
 (0)
0