@@ -153,10 +153,14 @@ enum machine_format_code {
153
153
static arraydata *
154
154
arraydata_alloc (Py_ssize_t size , int itemsize )
155
155
{
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 );
157
158
if (data == NULL ) {
158
159
return NULL ;
159
160
}
161
+ #ifdef Py_DEBUG
162
+ memset (data , 0 , bufsize );
163
+ #endif
160
164
data -> allocated = size ;
161
165
return data ;
162
166
}
@@ -191,7 +195,7 @@ arraydata_realloc(arraydata *data, Py_ssize_t size, int itemsize)
191
195
192
196
#endif
193
197
194
- static char *
198
+ static inline char *
195
199
array_items_ptr (arrayobject * self )
196
200
{
197
201
return self -> data == NULL ? NULL : self -> data -> items ;
@@ -316,9 +320,8 @@ b_setitem(char *items, Py_ssize_t i, PyObject *v)
316
320
/* PyArg_Parse's 'b' formatter is for an unsigned char, therefore
317
321
must use the next size up that is signed ('h') and manually do
318
322
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 ))
320
324
return -1 ;
321
- }
322
325
else if (x < -128 ) {
323
326
PyErr_SetString (PyExc_OverflowError ,
324
327
"signed char is less than minimum" );
@@ -329,9 +332,8 @@ b_setitem(char *items, Py_ssize_t i, PyObject *v)
329
332
"signed char is greater than maximum" );
330
333
return -1 ;
331
334
}
332
- if (i >= 0 ) {
335
+ if (i >= 0 )
333
336
((char * )items )[i ] = (char )x ;
334
- }
335
337
return 0 ;
336
338
}
337
339
@@ -347,12 +349,10 @@ BB_setitem(char *items, Py_ssize_t i, PyObject *v)
347
349
{
348
350
unsigned char x ;
349
351
/* '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 ))
351
353
return -1 ;
352
- }
353
- if (i >= 0 ) {
354
+ if (i >= 0 )
354
355
((unsigned char * )items )[i ] = x ;
355
- }
356
356
return 0 ;
357
357
}
358
358
@@ -441,12 +441,10 @@ h_setitem(char *items, Py_ssize_t i, PyObject *v)
441
441
{
442
442
short x ;
443
443
/* '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 ))
445
445
return -1 ;
446
- }
447
- if (i >= 0 ) {
446
+ if (i >= 0 )
448
447
((short * )items )[i ] = x ;
449
- }
450
448
return 0 ;
451
449
}
452
450
@@ -462,9 +460,8 @@ HH_setitem(char *items, Py_ssize_t i, PyObject *v)
462
460
int x ;
463
461
/* PyArg_Parse's 'h' formatter is for a signed short, therefore
464
462
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 ))
466
464
return -1 ;
467
- }
468
465
else if (x < 0 ) {
469
466
PyErr_SetString (PyExc_OverflowError ,
470
467
"unsigned short is less than minimum" );
@@ -475,9 +472,8 @@ HH_setitem(char *items, Py_ssize_t i, PyObject *v)
475
472
"unsigned short is greater than maximum" );
476
473
return -1 ;
477
474
}
478
- if (i >= 0 ) {
475
+ if (i >= 0 )
479
476
((short * )items )[i ] = (short )x ;
480
- }
481
477
return 0 ;
482
478
}
483
479
@@ -492,12 +488,10 @@ i_setitem(char *items, Py_ssize_t i, PyObject *v)
492
488
{
493
489
int x ;
494
490
/* '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 ))
496
492
return -1 ;
497
- }
498
- if (i >= 0 ) {
493
+ if (i >= 0 )
499
494
((int * )items )[i ] = x ;
500
- }
501
495
return 0 ;
502
496
}
503
497
@@ -536,9 +530,8 @@ II_setitem(char *items, Py_ssize_t i, PyObject *v)
536
530
}
537
531
return -1 ;
538
532
}
539
- if (i >= 0 ) {
533
+ if (i >= 0 )
540
534
((unsigned int * )items )[i ] = (unsigned int )x ;
541
- }
542
535
543
536
if (do_decref ) {
544
537
Py_DECREF (v );
@@ -556,12 +549,10 @@ static int
556
549
l_setitem (char * items , Py_ssize_t i , PyObject * v )
557
550
{
558
551
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 ))
560
553
return -1 ;
561
- }
562
- if (i >= 0 ) {
554
+ if (i >= 0 )
563
555
((long * )items )[i ] = x ;
564
- }
565
556
return 0 ;
566
557
}
567
558
@@ -591,9 +582,8 @@ LL_setitem(char *items, Py_ssize_t i, PyObject *v)
591
582
}
592
583
return -1 ;
593
584
}
594
- if (i >= 0 ) {
585
+ if (i >= 0 )
595
586
((unsigned long * )items )[i ] = x ;
596
- }
597
587
598
588
if (do_decref ) {
599
589
Py_DECREF (v );
@@ -611,12 +601,10 @@ static int
611
601
q_setitem (char * items , Py_ssize_t i , PyObject * v )
612
602
{
613
603
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 ))
615
605
return -1 ;
616
- }
617
- if (i >= 0 ) {
606
+ if (i >= 0 )
618
607
((long long * )items )[i ] = x ;
619
- }
620
608
return 0 ;
621
609
}
622
610
@@ -647,9 +635,8 @@ QQ_setitem(char *items, Py_ssize_t i, PyObject *v)
647
635
}
648
636
return -1 ;
649
637
}
650
- if (i >= 0 ) {
638
+ if (i >= 0 )
651
639
((unsigned long long * )items )[i ] = x ;
652
- }
653
640
654
641
if (do_decref ) {
655
642
Py_DECREF (v );
@@ -667,12 +654,10 @@ static int
667
654
f_setitem (char * items , Py_ssize_t i , PyObject * v )
668
655
{
669
656
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 ))
671
658
return -1 ;
672
- }
673
- if (i >= 0 ) {
659
+ if (i >= 0 )
674
660
((float * )items )[i ] = x ;
675
- }
676
661
return 0 ;
677
662
}
678
663
@@ -686,12 +671,10 @@ static int
686
671
d_setitem (char * items , Py_ssize_t i , PyObject * v )
687
672
{
688
673
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 ))
690
675
return -1 ;
691
- }
692
- if (i >= 0 ) {
676
+ if (i >= 0 )
693
677
((double * )items )[i ] = x ;
694
- }
695
678
return 0 ;
696
679
}
697
680
@@ -700,11 +683,9 @@ d_setitem(char *items, Py_ssize_t i, PyObject *v)
700
683
code##_compareitems(const void *lhs, const void *rhs, Py_ssize_t length) \
701
684
{ \
702
685
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]) \
705
688
return a[i] < b[i] ? -1 : 1; \
706
- } \
707
- } \
708
689
return 0; \
709
690
}
710
691
@@ -984,9 +965,7 @@ array_dealloc(PyObject *op)
984
965
985
966
arrayobject * self = arrayobject_CAST (op );
986
967
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" );
990
969
}
991
970
if (self -> weakreflist != NULL ) {
992
971
PyObject_ClearWeakRefs (op );
0 commit comments