@@ -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