@@ -153,10 +153,14 @@ enum machine_format_code {
153153static arraydata *
154154arraydata_alloc (Py_ssize_t size , int itemsize )
155155{
156- arraydata * data = (arraydata * )PyMem_Malloc (sizeof (arraydata ) + size * itemsize );
156+ size_t bufsize = sizeof (arraydata ) + size * itemsize ;
157+ arraydata * data = (arraydata * )PyMem_Malloc (bufsize );
157158 if (data == NULL ) {
158159 return NULL ;
159160 }
161+ #ifdef Py_DEBUG
162+ memset (data , 0 , bufsize );
163+ #endif
160164 data -> allocated = size ;
161165 return data ;
162166}
@@ -191,7 +195,7 @@ arraydata_realloc(arraydata *data, Py_ssize_t size, int itemsize)
191195
192196#endif
193197
194- static char *
198+ static inline char *
195199array_items_ptr (arrayobject * self )
196200{
197201 return self -> data == NULL ? NULL : self -> data -> items ;
@@ -316,9 +320,8 @@ b_setitem(char *items, Py_ssize_t i, PyObject *v)
316320 /* PyArg_Parse's 'b' formatter is for an unsigned char, therefore
317321 must use the next size up that is signed ('h') and manually do
318322 the overflow checking */
319- if (!PyArg_Parse (v , "h;array item must be integer" , & x )) {
323+ if (!PyArg_Parse (v , "h;array item must be integer" , & x ))
320324 return -1 ;
321- }
322325 else if (x < -128 ) {
323326 PyErr_SetString (PyExc_OverflowError ,
324327 "signed char is less than minimum" );
@@ -329,9 +332,8 @@ b_setitem(char *items, Py_ssize_t i, PyObject *v)
329332 "signed char is greater than maximum" );
330333 return -1 ;
331334 }
332- if (i >= 0 ) {
335+ if (i >= 0 )
333336 ((char * )items )[i ] = (char )x ;
334- }
335337 return 0 ;
336338}
337339
@@ -347,12 +349,10 @@ BB_setitem(char *items, Py_ssize_t i, PyObject *v)
347349{
348350 unsigned char x ;
349351 /* 'B' == unsigned char, maps to PyArg_Parse's 'b' formatter */
350- if (!PyArg_Parse (v , "b;array item must be integer" , & x )) {
352+ if (!PyArg_Parse (v , "b;array item must be integer" , & x ))
351353 return -1 ;
352- }
353- if (i >= 0 ) {
354+ if (i >= 0 )
354355 ((unsigned char * )items )[i ] = x ;
355- }
356356 return 0 ;
357357}
358358
@@ -441,12 +441,10 @@ h_setitem(char *items, Py_ssize_t i, PyObject *v)
441441{
442442 short x ;
443443 /* 'h' == signed short, maps to PyArg_Parse's 'h' formatter */
444- if (!PyArg_Parse (v , "h;array item must be integer" , & x )) {
444+ if (!PyArg_Parse (v , "h;array item must be integer" , & x ))
445445 return -1 ;
446- }
447- if (i >= 0 ) {
446+ if (i >= 0 )
448447 ((short * )items )[i ] = x ;
449- }
450448 return 0 ;
451449}
452450
@@ -462,9 +460,8 @@ HH_setitem(char *items, Py_ssize_t i, PyObject *v)
462460 int x ;
463461 /* PyArg_Parse's 'h' formatter is for a signed short, therefore
464462 must use the next size up and manually do the overflow checking */
465- if (!PyArg_Parse (v , "i;array item must be integer" , & x )) {
463+ if (!PyArg_Parse (v , "i;array item must be integer" , & x ))
466464 return -1 ;
467- }
468465 else if (x < 0 ) {
469466 PyErr_SetString (PyExc_OverflowError ,
470467 "unsigned short is less than minimum" );
@@ -475,9 +472,8 @@ HH_setitem(char *items, Py_ssize_t i, PyObject *v)
475472 "unsigned short is greater than maximum" );
476473 return -1 ;
477474 }
478- if (i >= 0 ) {
475+ if (i >= 0 )
479476 ((short * )items )[i ] = (short )x ;
480- }
481477 return 0 ;
482478}
483479
@@ -492,12 +488,10 @@ i_setitem(char *items, Py_ssize_t i, PyObject *v)
492488{
493489 int x ;
494490 /* 'i' == signed int, maps to PyArg_Parse's 'i' formatter */
495- if (!PyArg_Parse (v , "i;array item must be integer" , & x )) {
491+ if (!PyArg_Parse (v , "i;array item must be integer" , & x ))
496492 return -1 ;
497- }
498- if (i >= 0 ) {
493+ if (i >= 0 )
499494 ((int * )items )[i ] = x ;
500- }
501495 return 0 ;
502496}
503497
@@ -536,9 +530,8 @@ II_setitem(char *items, Py_ssize_t i, PyObject *v)
536530 }
537531 return -1 ;
538532 }
539- if (i >= 0 ) {
533+ if (i >= 0 )
540534 ((unsigned int * )items )[i ] = (unsigned int )x ;
541- }
542535
543536 if (do_decref ) {
544537 Py_DECREF (v );
@@ -556,12 +549,10 @@ static int
556549l_setitem (char * items , Py_ssize_t i , PyObject * v )
557550{
558551 long x ;
559- if (!PyArg_Parse (v , "l;array item must be integer" , & x )) {
552+ if (!PyArg_Parse (v , "l;array item must be integer" , & x ))
560553 return -1 ;
561- }
562- if (i >= 0 ) {
554+ if (i >= 0 )
563555 ((long * )items )[i ] = x ;
564- }
565556 return 0 ;
566557}
567558
@@ -591,9 +582,8 @@ LL_setitem(char *items, Py_ssize_t i, PyObject *v)
591582 }
592583 return -1 ;
593584 }
594- if (i >= 0 ) {
585+ if (i >= 0 )
595586 ((unsigned long * )items )[i ] = x ;
596- }
597587
598588 if (do_decref ) {
599589 Py_DECREF (v );
@@ -611,12 +601,10 @@ static int
611601q_setitem (char * items , Py_ssize_t i , PyObject * v )
612602{
613603 long long x ;
614- if (!PyArg_Parse (v , "L;array item must be integer" , & x )) {
604+ if (!PyArg_Parse (v , "L;array item must be integer" , & x ))
615605 return -1 ;
616- }
617- if (i >= 0 ) {
606+ if (i >= 0 )
618607 ((long long * )items )[i ] = x ;
619- }
620608 return 0 ;
621609}
622610
@@ -647,9 +635,8 @@ QQ_setitem(char *items, Py_ssize_t i, PyObject *v)
647635 }
648636 return -1 ;
649637 }
650- if (i >= 0 ) {
638+ if (i >= 0 )
651639 ((unsigned long long * )items )[i ] = x ;
652- }
653640
654641 if (do_decref ) {
655642 Py_DECREF (v );
@@ -667,12 +654,10 @@ static int
667654f_setitem (char * items , Py_ssize_t i , PyObject * v )
668655{
669656 float x ;
670- if (!PyArg_Parse (v , "f;array item must be float" , & x )) {
657+ if (!PyArg_Parse (v , "f;array item must be float" , & x ))
671658 return -1 ;
672- }
673- if (i >= 0 ) {
659+ if (i >= 0 )
674660 ((float * )items )[i ] = x ;
675- }
676661 return 0 ;
677662}
678663
@@ -686,12 +671,10 @@ static int
686671d_setitem (char * items , Py_ssize_t i , PyObject * v )
687672{
688673 double x ;
689- if (!PyArg_Parse (v , "d;array item must be float" , & x )) {
674+ if (!PyArg_Parse (v , "d;array item must be float" , & x ))
690675 return -1 ;
691- }
692- if (i >= 0 ) {
676+ if (i >= 0 )
693677 ((double * )items )[i ] = x ;
694- }
695678 return 0 ;
696679}
697680
@@ -700,11 +683,9 @@ d_setitem(char *items, Py_ssize_t i, PyObject *v)
700683 code##_compareitems(const void *lhs, const void *rhs, Py_ssize_t length) \
701684 { \
702685 const type *a = lhs, *b = rhs; \
703- for (Py_ssize_t i = 0; i < length; ++i) { \
704- if (a[i] != b[i]) { \
686+ for (Py_ssize_t i = 0; i < length; ++i) \
687+ if (a[i] != b[i]) \
705688 return a[i] < b[i] ? -1 : 1; \
706- } \
707- } \
708689 return 0; \
709690 }
710691
@@ -984,9 +965,7 @@ array_dealloc(PyObject *op)
984965
985966 arrayobject * self = arrayobject_CAST (op );
986967 if (self -> ob_exports > 0 ) {
987- PyErr_SetString (PyExc_SystemError ,
988- "deallocated array object has exported buffers" );
989- PyErr_WriteUnraisable (NULL );
968+ PyErr_FormatUnraisable ("deallocated array object has exported buffers" );
990969 }
991970 if (self -> weakreflist != NULL ) {
992971 PyObject_ClearWeakRefs (op );
0 commit comments