Skip to content

Commit 4b499e9

Browse files
committed
Address code review
1 parent 77c3bf9 commit 4b499e9

2 files changed

Lines changed: 14 additions & 7 deletions

File tree

Include/internal/pycore_object.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -872,6 +872,7 @@ static inline int _PyType_SUPPORTS_WEAKREFS(PyTypeObject *type) {
872872
return (type->tp_weaklistoffset != 0);
873873
}
874874

875+
// Export for 'array' shared extension.
875876
PyAPI_FUNC(PyObject*) _PyType_AllocNoTrack(PyTypeObject *type, Py_ssize_t nitems);
876877
PyAPI_FUNC(PyObject *) _PyType_NewManagedObject(PyTypeObject *type);
877878

Modules/arraymodule.c

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1002,13 +1002,14 @@ array_slice(arrayobject *a, Py_ssize_t ilow, Py_ssize_t ihigh)
10021002
ihigh = ilow;
10031003
else if (ihigh > Py_SIZE(a))
10041004
ihigh = Py_SIZE(a);
1005-
np = (arrayobject *) newarrayobject(state->ArrayType, ihigh - ilow, a->ob_descr);
1005+
np = (arrayobject *) newarrayobject_untracked(state->ArrayType, ihigh - ilow, a->ob_descr);
10061006
if (np == NULL)
10071007
return NULL;
10081008
if (ihigh > ilow) {
10091009
memcpy(np->ob_item, a->ob_item + ilow * a->ob_descr->itemsize,
10101010
(ihigh-ilow) * a->ob_descr->itemsize);
10111011
}
1012+
_PyObject_GC_TRACK(np);
10121013
return (PyObject *)np;
10131014
}
10141015

@@ -1079,7 +1080,7 @@ array_concat(PyObject *op, PyObject *bb)
10791080
return PyErr_NoMemory();
10801081
}
10811082
size = Py_SIZE(a) + Py_SIZE(b);
1082-
np = (arrayobject *) newarrayobject(state->ArrayType, size, a->ob_descr);
1083+
np = (arrayobject *) newarrayobject_untracked(state->ArrayType, size, a->ob_descr);
10831084
if (np == NULL) {
10841085
return NULL;
10851086
}
@@ -1090,6 +1091,7 @@ array_concat(PyObject *op, PyObject *bb)
10901091
memcpy(np->ob_item + Py_SIZE(a)*a->ob_descr->itemsize,
10911092
b->ob_item, Py_SIZE(b)*b->ob_descr->itemsize);
10921093
}
1094+
_PyObject_GC_TRACK(np);
10931095
return (PyObject *)np;
10941096
#undef b
10951097
}
@@ -1107,16 +1109,19 @@ array_repeat(PyObject *op, Py_ssize_t n)
11071109
return PyErr_NoMemory();
11081110
}
11091111
Py_ssize_t size = array_length * n;
1110-
arrayobject* np = (arrayobject *) newarrayobject(state->ArrayType, size, a->ob_descr);
1112+
arrayobject* np = (arrayobject *) newarrayobject_untracked(state->ArrayType, size, a->ob_descr);
11111113
if (np == NULL)
11121114
return NULL;
1113-
if (size == 0)
1115+
if (size == 0) {
1116+
_PyObject_GC_TRACK(np);
11141117
return (PyObject *)np;
1118+
}
11151119

11161120
const Py_ssize_t oldbytes = array_length * a->ob_descr->itemsize;
11171121
const Py_ssize_t newbytes = oldbytes * n;
11181122
_PyBytes_RepeatBuffer(np->ob_item, newbytes, a->ob_item, oldbytes);
11191123

1124+
_PyObject_GC_TRACK(np);
11201125
return (PyObject *)np;
11211126
}
11221127

@@ -2678,17 +2683,17 @@ array_subscr(PyObject *op, PyObject *item)
26782683
return newarrayobject(state->ArrayType, 0, self->ob_descr);
26792684
}
26802685
else if (step == 1) {
2681-
PyObject *result = newarrayobject(state->ArrayType,
2682-
slicelength, self->ob_descr);
2686+
PyObject *result = newarrayobject_untracked(state->ArrayType, slicelength, self->ob_descr);
26832687
if (result == NULL)
26842688
return NULL;
26852689
memcpy(((arrayobject *)result)->ob_item,
26862690
self->ob_item + start * itemsize,
26872691
slicelength * itemsize);
2692+
_PyObject_GC_TRACK(result);
26882693
return result;
26892694
}
26902695
else {
2691-
result = newarrayobject(state->ArrayType, slicelength, self->ob_descr);
2696+
result = newarrayobject_untracked(state->ArrayType, slicelength, self->ob_descr);
26922697
if (!result) return NULL;
26932698

26942699
ar = (arrayobject*)result;
@@ -2700,6 +2705,7 @@ array_subscr(PyObject *op, PyObject *item)
27002705
itemsize);
27012706
}
27022707

2708+
_PyObject_GC_TRACK(result);
27032709
return result;
27042710
}
27052711
}

0 commit comments

Comments
 (0)