@@ -2819,70 +2819,91 @@ static struct PyModuleDef _testbuffermodule = {
28192819 NULL
28202820};
28212821
2822-
2823- PyMODINIT_FUNC
2824- PyInit__testbuffer (void )
2822+ static int
2823+ _testbuffer_exec (PyObject * mod )
28252824{
2826- PyObject * m ;
2827-
2828- m = PyModule_Create (& _testbuffermodule );
2829- if (m == NULL )
2830- return NULL ;
2831-
28322825 Py_SET_TYPE (& NDArray_Type , & PyType_Type );
2833- Py_INCREF (& NDArray_Type );
2834- PyModule_AddObject (m , "ndarray" , (PyObject * )& NDArray_Type );
2826+ if (PyModule_AddType (mod , & NDArray_Type ) < 0 ) {
2827+ return -1 ;
2828+ }
28352829
28362830 Py_SET_TYPE (& StaticArray_Type , & PyType_Type );
2837- Py_INCREF (& StaticArray_Type );
2838- PyModule_AddObject (m , "staticarray" , (PyObject * )& StaticArray_Type );
2831+ if (PyModule_AddType (mod , & StaticArray_Type ) < 0 ) {
2832+ return -1 ;
2833+ }
28392834
28402835 structmodule = PyImport_ImportModule ("struct" );
2841- if (structmodule == NULL )
2842- return NULL ;
2836+ if (structmodule == NULL ) {
2837+ return -1 ;
2838+ }
28432839
28442840 Struct = PyObject_GetAttrString (structmodule , "Struct" );
2841+ if (Struct == NULL ) {
2842+ return -1 ;
2843+ }
28452844 calcsize = PyObject_GetAttrString (structmodule , "calcsize" );
2846- if (Struct == NULL || calcsize == NULL )
2847- return NULL ;
2845+ if (calcsize == NULL ) {
2846+ return -1 ;
2847+ }
28482848
28492849 simple_format = PyUnicode_FromString (simple_fmt );
2850- if (simple_format == NULL )
2851- return NULL ;
2852-
2853- PyModule_AddIntMacro (m , ND_MAX_NDIM );
2854- PyModule_AddIntMacro (m , ND_VAREXPORT );
2855- PyModule_AddIntMacro (m , ND_WRITABLE );
2856- PyModule_AddIntMacro (m , ND_FORTRAN );
2857- PyModule_AddIntMacro (m , ND_SCALAR );
2858- PyModule_AddIntMacro (m , ND_PIL );
2859- PyModule_AddIntMacro (m , ND_GETBUF_FAIL );
2860- PyModule_AddIntMacro (m , ND_GETBUF_UNDEFINED );
2861- PyModule_AddIntMacro (m , ND_REDIRECT );
2862-
2863- PyModule_AddIntMacro (m , PyBUF_SIMPLE );
2864- PyModule_AddIntMacro (m , PyBUF_WRITABLE );
2865- PyModule_AddIntMacro (m , PyBUF_FORMAT );
2866- PyModule_AddIntMacro (m , PyBUF_ND );
2867- PyModule_AddIntMacro (m , PyBUF_STRIDES );
2868- PyModule_AddIntMacro (m , PyBUF_INDIRECT );
2869- PyModule_AddIntMacro (m , PyBUF_C_CONTIGUOUS );
2870- PyModule_AddIntMacro (m , PyBUF_F_CONTIGUOUS );
2871- PyModule_AddIntMacro (m , PyBUF_ANY_CONTIGUOUS );
2872- PyModule_AddIntMacro (m , PyBUF_FULL );
2873- PyModule_AddIntMacro (m , PyBUF_FULL_RO );
2874- PyModule_AddIntMacro (m , PyBUF_RECORDS );
2875- PyModule_AddIntMacro (m , PyBUF_RECORDS_RO );
2876- PyModule_AddIntMacro (m , PyBUF_STRIDED );
2877- PyModule_AddIntMacro (m , PyBUF_STRIDED_RO );
2878- PyModule_AddIntMacro (m , PyBUF_CONTIG );
2879- PyModule_AddIntMacro (m , PyBUF_CONTIG_RO );
2880-
2881- PyModule_AddIntMacro (m , PyBUF_READ );
2882- PyModule_AddIntMacro (m , PyBUF_WRITE );
2883-
2884- return m ;
2885- }
2850+ if (simple_format == NULL ) {
2851+ return -1 ;
2852+ }
28862853
2854+ #define ADD_INT_MACRO (mod , macro ) \
2855+ do { \
2856+ if (PyModule_AddIntConstant(mod, #macro, macro) < 0) { \
2857+ return -1; \
2858+ } \
2859+ } while (0)
2860+
2861+ ADD_INT_MACRO (mod , ND_MAX_NDIM );
2862+ ADD_INT_MACRO (mod , ND_VAREXPORT );
2863+ ADD_INT_MACRO (mod , ND_WRITABLE );
2864+ ADD_INT_MACRO (mod , ND_FORTRAN );
2865+ ADD_INT_MACRO (mod , ND_SCALAR );
2866+ ADD_INT_MACRO (mod , ND_PIL );
2867+ ADD_INT_MACRO (mod , ND_GETBUF_FAIL );
2868+ ADD_INT_MACRO (mod , ND_GETBUF_UNDEFINED );
2869+ ADD_INT_MACRO (mod , ND_REDIRECT );
2870+
2871+ ADD_INT_MACRO (mod , PyBUF_SIMPLE );
2872+ ADD_INT_MACRO (mod , PyBUF_WRITABLE );
2873+ ADD_INT_MACRO (mod , PyBUF_FORMAT );
2874+ ADD_INT_MACRO (mod , PyBUF_ND );
2875+ ADD_INT_MACRO (mod , PyBUF_STRIDES );
2876+ ADD_INT_MACRO (mod , PyBUF_INDIRECT );
2877+ ADD_INT_MACRO (mod , PyBUF_C_CONTIGUOUS );
2878+ ADD_INT_MACRO (mod , PyBUF_F_CONTIGUOUS );
2879+ ADD_INT_MACRO (mod , PyBUF_ANY_CONTIGUOUS );
2880+ ADD_INT_MACRO (mod , PyBUF_FULL );
2881+ ADD_INT_MACRO (mod , PyBUF_FULL_RO );
2882+ ADD_INT_MACRO (mod , PyBUF_RECORDS );
2883+ ADD_INT_MACRO (mod , PyBUF_RECORDS_RO );
2884+ ADD_INT_MACRO (mod , PyBUF_STRIDED );
2885+ ADD_INT_MACRO (mod , PyBUF_STRIDED_RO );
2886+ ADD_INT_MACRO (mod , PyBUF_CONTIG );
2887+ ADD_INT_MACRO (mod , PyBUF_CONTIG_RO );
2888+
2889+ ADD_INT_MACRO (mod , PyBUF_READ );
2890+ ADD_INT_MACRO (mod , PyBUF_WRITE );
2891+
2892+ #undef ADD_INT_MACRO
28872893
2894+ return 0 ;
2895+ }
28882896
2897+ PyMODINIT_FUNC
2898+ PyInit__testbuffer (void )
2899+ {
2900+ PyObject * mod = PyModule_Create (& _testbuffermodule );
2901+ if (mod == NULL ) {
2902+ return NULL ;
2903+ }
2904+ if (_testbuffer_exec (mod ) < 0 ) {
2905+ Py_DECREF (mod );
2906+ return NULL ;
2907+ }
2908+ return mod ;
2909+ }
0 commit comments