@@ -232,56 +232,54 @@ tuple_repr(PyObject *self)
232
232
return res > 0 ? PyUnicode_FromString ("(...)" ) : NULL ;
233
233
}
234
234
235
- _PyUnicodeWriter writer ;
236
- _PyUnicodeWriter_Init (& writer );
237
- writer .overallocate = 1 ;
235
+ Py_ssize_t prealloc ;
238
236
if (n > 1 ) {
239
- /* "(" + "1" + ", 2" * (len - 1) + ")" */
240
- writer . min_length = 1 + 1 + (2 + 1 ) * (n - 1 ) + 1 ;
237
+ // "(" + "1" + ", 2" * (len - 1) + ")"
238
+ prealloc = 1 + 1 + (2 + 1 ) * (n - 1 ) + 1 ;
241
239
}
242
240
else {
243
- /* "(1,)" */
244
- writer .min_length = 4 ;
241
+ // "(1,)"
242
+ prealloc = 4 ;
243
+ }
244
+ PyUnicodeWriter * writer = PyUnicodeWriter_Create (prealloc );
245
+ if (writer == NULL ) {
246
+ goto error ;
245
247
}
246
248
247
- if (_PyUnicodeWriter_WriteChar ( & writer , '(' ) < 0 )
249
+ if (PyUnicodeWriter_WriteChar ( writer , '(' ) < 0 ) {
248
250
goto error ;
251
+ }
249
252
250
253
/* Do repr() on each element. */
251
254
for (Py_ssize_t i = 0 ; i < n ; ++ i ) {
252
- PyObject * s ;
253
-
254
255
if (i > 0 ) {
255
- if (_PyUnicodeWriter_WriteASCIIString ( & writer , ", " , 2 ) < 0 )
256
+ if (PyUnicodeWriter_WriteChar ( writer , ',' ) < 0 ) {
256
257
goto error ;
258
+ }
259
+ if (PyUnicodeWriter_WriteChar (writer , ' ' ) < 0 ) {
260
+ goto error ;
261
+ }
257
262
}
258
263
259
- s = PyObject_Repr (v -> ob_item [i ]);
260
- if (s == NULL )
261
- goto error ;
262
-
263
- if (_PyUnicodeWriter_WriteStr (& writer , s ) < 0 ) {
264
- Py_DECREF (s );
264
+ if (PyUnicodeWriter_WriteRepr (writer , v -> ob_item [i ]) < 0 ) {
265
265
goto error ;
266
266
}
267
- Py_DECREF (s );
268
267
}
269
268
270
- writer .overallocate = 0 ;
271
- if (n > 1 ) {
272
- if (_PyUnicodeWriter_WriteChar (& writer , ')' ) < 0 )
269
+ if (n == 1 ) {
270
+ if (PyUnicodeWriter_WriteChar (writer , ',' ) < 0 ) {
273
271
goto error ;
272
+ }
274
273
}
275
- else {
276
- if (_PyUnicodeWriter_WriteASCIIString (& writer , ",)" , 2 ) < 0 )
277
- goto error ;
274
+ if (PyUnicodeWriter_WriteChar (writer , ')' ) < 0 ) {
275
+ goto error ;
278
276
}
279
277
280
278
Py_ReprLeave ((PyObject * )v );
281
- return _PyUnicodeWriter_Finish ( & writer );
279
+ return PyUnicodeWriter_Finish ( writer );
282
280
283
281
error :
284
- _PyUnicodeWriter_Dealloc ( & writer );
282
+ PyUnicodeWriter_Discard ( writer );
285
283
Py_ReprLeave ((PyObject * )v );
286
284
return NULL ;
287
285
}
0 commit comments