@@ -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