Skip to content

Commit 1a50981

Browse files
committed
requested changes
1 parent cad8ca2 commit 1a50981

File tree

1 file changed

+30
-51
lines changed

1 file changed

+30
-51
lines changed

Modules/arraymodule.c

Lines changed: 30 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -153,10 +153,14 @@ enum machine_format_code {
153153
static arraydata *
154154
arraydata_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 *
195199
array_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
556549
l_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
611601
q_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
667654
f_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
686671
d_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

Comments
 (0)