@@ -1232,6 +1232,13 @@ struct PyTupleWriter {
12321232};
12331233
12341234
1235+ static inline void
1236+ tuplewriter_free (PyTupleWriter * writer )
1237+ {
1238+ _Py_FREELIST_FREE (tuple_writers , writer , PyMem_Free );
1239+ }
1240+
1241+
12351242static int
12361243_PyTupleWriter_SetSize (PyTupleWriter * writer , size_t size , int resize )
12371244{
@@ -1286,21 +1293,25 @@ PyTupleWriter_Create(Py_ssize_t size)
12861293 return NULL ;
12871294 }
12881295 }
1289- #ifdef Py_DEBUG
1290- memset (writer -> small_tuple , 0xff , sizeof (writer -> small_tuple ));
1291- #endif
1292- writer -> tuple = NULL ;
1293- writer -> items = writer -> small_tuple ;
12941296 writer -> size = 0 ;
1295- writer -> allocated = Py_ARRAY_LENGTH (writer -> small_tuple );
12961297
1297- if ((size_t )size > writer -> allocated ) {
1298- if (_PyTupleWriter_SetSize (writer , size , 0 ) < 0 ) {
1299- PyTupleWriter_Discard (writer );
1298+ if (size != 0 ) {
1299+ writer -> tuple = _PyTuple_NewNoTrack (size );
1300+ if (writer -> tuple == NULL ) {
1301+ tuplewriter_free (writer );
13001302 return NULL ;
13011303 }
1304+ writer -> items = _PyTuple_ITEMS (writer -> tuple );
1305+ writer -> allocated = size ;
1306+ }
1307+ else {
1308+ #ifdef Py_DEBUG
1309+ memset (writer -> small_tuple , 0xff , sizeof (writer -> small_tuple ));
1310+ #endif
1311+ writer -> tuple = NULL ;
1312+ writer -> items = writer -> small_tuple ;
1313+ writer -> allocated = Py_ARRAY_LENGTH (writer -> small_tuple );
13021314 }
1303-
13041315 return writer ;
13051316}
13061317
@@ -1383,13 +1394,6 @@ _PyTupleWriter_GetItems(PyTupleWriter *writer, Py_ssize_t *size)
13831394}
13841395
13851396
1386- static inline void
1387- tuplewriter_free (PyTupleWriter * writer )
1388- {
1389- _Py_FREELIST_FREE (tuple_writers , writer , PyMem_Free );
1390- }
1391-
1392-
13931397void
13941398PyTupleWriter_Discard (PyTupleWriter * writer )
13951399{
0 commit comments