@@ -2825,70 +2825,91 @@ static struct PyModuleDef _testbuffermodule = {
28252825 NULL
28262826};
28272827
2828-
2829- PyMODINIT_FUNC
2830- PyInit__testbuffer (void )
2828+ static int
2829+ _testbuffer_exec (PyObject * mod )
28312830{
2832- PyObject * m ;
2833-
2834- m = PyModule_Create (& _testbuffermodule );
2835- if (m == NULL )
2836- return NULL ;
2837-
28382831 Py_SET_TYPE (& NDArray_Type , & PyType_Type );
2839- Py_INCREF (& NDArray_Type );
2840- PyModule_AddObject (m , "ndarray" , (PyObject * )& NDArray_Type );
2832+ if (PyModule_AddType (mod , & NDArray_Type ) < 0 ) {
2833+ return -1 ;
2834+ }
28412835
28422836 Py_SET_TYPE (& StaticArray_Type , & PyType_Type );
2843- Py_INCREF (& StaticArray_Type );
2844- PyModule_AddObject (m , "staticarray" , (PyObject * )& StaticArray_Type );
2837+ if (PyModule_AddType (mod , & StaticArray_Type ) < 0 ) {
2838+ return -1 ;
2839+ }
28452840
28462841 structmodule = PyImport_ImportModule ("struct" );
2847- if (structmodule == NULL )
2848- return NULL ;
2842+ if (structmodule == NULL ) {
2843+ return -1 ;
2844+ }
28492845
28502846 Struct = PyObject_GetAttrString (structmodule , "Struct" );
2847+ if (Struct == NULL ) {
2848+ return -1 ;
2849+ }
28512850 calcsize = PyObject_GetAttrString (structmodule , "calcsize" );
2852- if (Struct == NULL || calcsize == NULL )
2853- return NULL ;
2851+ if (calcsize == NULL ) {
2852+ return -1 ;
2853+ }
28542854
28552855 simple_format = PyUnicode_FromString (simple_fmt );
2856- if (simple_format == NULL )
2857- return NULL ;
2858-
2859- PyModule_AddIntMacro (m , ND_MAX_NDIM );
2860- PyModule_AddIntMacro (m , ND_VAREXPORT );
2861- PyModule_AddIntMacro (m , ND_WRITABLE );
2862- PyModule_AddIntMacro (m , ND_FORTRAN );
2863- PyModule_AddIntMacro (m , ND_SCALAR );
2864- PyModule_AddIntMacro (m , ND_PIL );
2865- PyModule_AddIntMacro (m , ND_GETBUF_FAIL );
2866- PyModule_AddIntMacro (m , ND_GETBUF_UNDEFINED );
2867- PyModule_AddIntMacro (m , ND_REDIRECT );
2868-
2869- PyModule_AddIntMacro (m , PyBUF_SIMPLE );
2870- PyModule_AddIntMacro (m , PyBUF_WRITABLE );
2871- PyModule_AddIntMacro (m , PyBUF_FORMAT );
2872- PyModule_AddIntMacro (m , PyBUF_ND );
2873- PyModule_AddIntMacro (m , PyBUF_STRIDES );
2874- PyModule_AddIntMacro (m , PyBUF_INDIRECT );
2875- PyModule_AddIntMacro (m , PyBUF_C_CONTIGUOUS );
2876- PyModule_AddIntMacro (m , PyBUF_F_CONTIGUOUS );
2877- PyModule_AddIntMacro (m , PyBUF_ANY_CONTIGUOUS );
2878- PyModule_AddIntMacro (m , PyBUF_FULL );
2879- PyModule_AddIntMacro (m , PyBUF_FULL_RO );
2880- PyModule_AddIntMacro (m , PyBUF_RECORDS );
2881- PyModule_AddIntMacro (m , PyBUF_RECORDS_RO );
2882- PyModule_AddIntMacro (m , PyBUF_STRIDED );
2883- PyModule_AddIntMacro (m , PyBUF_STRIDED_RO );
2884- PyModule_AddIntMacro (m , PyBUF_CONTIG );
2885- PyModule_AddIntMacro (m , PyBUF_CONTIG_RO );
2886-
2887- PyModule_AddIntMacro (m , PyBUF_READ );
2888- PyModule_AddIntMacro (m , PyBUF_WRITE );
2889-
2890- return m ;
2891- }
2856+ if (simple_format == NULL ) {
2857+ return -1 ;
2858+ }
28922859
2860+ #define ADD_INT_MACRO (mod , macro ) \
2861+ do { \
2862+ if (PyModule_AddIntConstant(mod, #macro, macro) < 0) { \
2863+ return -1; \
2864+ } \
2865+ } while (0)
2866+
2867+ ADD_INT_MACRO (mod , ND_MAX_NDIM );
2868+ ADD_INT_MACRO (mod , ND_VAREXPORT );
2869+ ADD_INT_MACRO (mod , ND_WRITABLE );
2870+ ADD_INT_MACRO (mod , ND_FORTRAN );
2871+ ADD_INT_MACRO (mod , ND_SCALAR );
2872+ ADD_INT_MACRO (mod , ND_PIL );
2873+ ADD_INT_MACRO (mod , ND_GETBUF_FAIL );
2874+ ADD_INT_MACRO (mod , ND_GETBUF_UNDEFINED );
2875+ ADD_INT_MACRO (mod , ND_REDIRECT );
2876+
2877+ ADD_INT_MACRO (mod , PyBUF_SIMPLE );
2878+ ADD_INT_MACRO (mod , PyBUF_WRITABLE );
2879+ ADD_INT_MACRO (mod , PyBUF_FORMAT );
2880+ ADD_INT_MACRO (mod , PyBUF_ND );
2881+ ADD_INT_MACRO (mod , PyBUF_STRIDES );
2882+ ADD_INT_MACRO (mod , PyBUF_INDIRECT );
2883+ ADD_INT_MACRO (mod , PyBUF_C_CONTIGUOUS );
2884+ ADD_INT_MACRO (mod , PyBUF_F_CONTIGUOUS );
2885+ ADD_INT_MACRO (mod , PyBUF_ANY_CONTIGUOUS );
2886+ ADD_INT_MACRO (mod , PyBUF_FULL );
2887+ ADD_INT_MACRO (mod , PyBUF_FULL_RO );
2888+ ADD_INT_MACRO (mod , PyBUF_RECORDS );
2889+ ADD_INT_MACRO (mod , PyBUF_RECORDS_RO );
2890+ ADD_INT_MACRO (mod , PyBUF_STRIDED );
2891+ ADD_INT_MACRO (mod , PyBUF_STRIDED_RO );
2892+ ADD_INT_MACRO (mod , PyBUF_CONTIG );
2893+ ADD_INT_MACRO (mod , PyBUF_CONTIG_RO );
2894+
2895+ ADD_INT_MACRO (mod , PyBUF_READ );
2896+ ADD_INT_MACRO (mod , PyBUF_WRITE );
2897+
2898+ #undef ADD_INT_MACRO
28932899
2900+ return 0 ;
2901+ }
28942902
2903+ PyMODINIT_FUNC
2904+ PyInit__testbuffer (void )
2905+ {
2906+ PyObject * mod = PyModule_Create (& _testbuffermodule );
2907+ if (mod == NULL ) {
2908+ return NULL ;
2909+ }
2910+ if (_testbuffer_exec (mod ) < 0 ) {
2911+ Py_DECREF (mod );
2912+ return NULL ;
2913+ }
2914+ return mod ;
2915+ }
0 commit comments