@@ -1462,10 +1462,11 @@ def visitModule(self, mod):
14621462        return PyObject_Repr(list); 
14631463    } 
14641464
1465-     _PyUnicodeWriter writer; 
1466-     _PyUnicodeWriter_Init(&writer); 
1467-     writer.overallocate = 1; 
14681465    PyObject *items[2] = {NULL, NULL}; 
1466+     PyUnicodeWriter *writer = PyUnicodeWriter_Create(0); 
1467+     if (writer == NULL) { 
1468+         goto error; 
1469+     } 
14691470
14701471    items[0] = PySequence_GetItem(list, 0); 
14711472    if (!items[0]) { 
@@ -1479,52 +1480,54 @@ def visitModule(self, mod):
14791480    } 
14801481
14811482    bool is_list = PyList_Check(list); 
1482-     if (_PyUnicodeWriter_WriteChar(& writer, is_list ? '[' : '(') < 0) { 
1483+     if (PyUnicodeWriter_WriteChar( writer, is_list ? '[' : '(') < 0) { 
14831484        goto error; 
14841485    } 
14851486
14861487    for (Py_ssize_t i = 0; i < Py_MIN(length, 2); i++) { 
1487-         PyObject *item = items[i]; 
1488-         PyObject *item_repr; 
1488+         if (i > 0) { 
1489+             if (PyUnicodeWriter_WriteUTF8(writer, ", ", 2) < 0) { 
1490+                 goto error; 
1491+             } 
1492+         } 
14891493
1494+         PyObject *item = items[i]; 
14901495        if (PyType_IsSubtype(Py_TYPE(item), (PyTypeObject *)state->AST_type)) { 
1496+             PyObject *item_repr; 
14911497            item_repr = ast_repr_max_depth((AST_object*)item, depth - 1); 
1492-         } else { 
1493-             item_repr = PyObject_Repr(item); 
1494-         } 
1495-         if (!item_repr) { 
1496-             goto error; 
1497-         } 
1498-         if (i > 0) { 
1499-             if (_PyUnicodeWriter_WriteASCIIString(&writer, ", ", 2) < 0) { 
1498+             if (!item_repr) { 
1499+                 goto error; 
1500+             } 
1501+             if (PyUnicodeWriter_WriteStr(writer, item_repr) < 0) { 
1502+                 Py_DECREF(item_repr); 
15001503                goto error; 
15011504            } 
1502-         } 
1503-         if (_PyUnicodeWriter_WriteStr(&writer, item_repr) < 0) { 
15041505            Py_DECREF(item_repr); 
1505-             goto error; 
1506+         } else { 
1507+             if (PyUnicodeWriter_WriteRepr(writer, item) < 0) { 
1508+                 goto error; 
1509+             } 
15061510        } 
1511+ 
15071512        if (i == 0 && length > 2) { 
1508-             if (_PyUnicodeWriter_WriteASCIIString(&writer, ", ...", 5) < 0) { 
1509-                 Py_DECREF(item_repr); 
1513+             if (PyUnicodeWriter_WriteUTF8(writer, ", ...", 5) < 0) { 
15101514                goto error; 
15111515            } 
15121516        } 
1513-         Py_DECREF(item_repr); 
15141517    } 
15151518
1516-     if (_PyUnicodeWriter_WriteChar(& writer, is_list ? ']' : ')') < 0) { 
1519+     if (PyUnicodeWriter_WriteChar( writer, is_list ? ']' : ')') < 0) { 
15171520        goto error; 
15181521    } 
15191522
15201523    Py_XDECREF(items[0]); 
15211524    Py_XDECREF(items[1]); 
1522-     return _PyUnicodeWriter_Finish(& writer); 
1525+     return PyUnicodeWriter_Finish( writer); 
15231526
15241527error: 
15251528    Py_XDECREF(items[0]); 
15261529    Py_XDECREF(items[1]); 
1527-     _PyUnicodeWriter_Dealloc(& writer); 
1530+     PyUnicodeWriter_Discard( writer); 
15281531    return NULL; 
15291532} 
15301533
@@ -1568,14 +1571,15 @@ def visitModule(self, mod):
15681571    } 
15691572
15701573    const char* tp_name = Py_TYPE(self)->tp_name; 
1571-     _PyUnicodeWriter writer; 
1572-     _PyUnicodeWriter_Init(&writer); 
1573-     writer.overallocate = 1; 
1574+     PyUnicodeWriter *writer = PyUnicodeWriter_Create(0); 
1575+     if (writer == NULL) { 
1576+         goto error; 
1577+     } 
15741578
1575-     if (_PyUnicodeWriter_WriteASCIIString(& writer, tp_name, strlen(tp_name) ) < 0) { 
1579+     if (PyUnicodeWriter_WriteUTF8( writer, tp_name, -1 ) < 0) { 
15761580        goto error; 
15771581    } 
1578-     if (_PyUnicodeWriter_WriteChar(& writer, '(') < 0) { 
1582+     if (PyUnicodeWriter_WriteChar( writer, '(') < 0) { 
15791583        goto error; 
15801584    } 
15811585
@@ -1610,43 +1614,43 @@ def visitModule(self, mod):
16101614        } 
16111615
16121616        if (i > 0) { 
1613-             if (_PyUnicodeWriter_WriteASCIIString(& writer, ", ", 2) < 0) { 
1617+             if (PyUnicodeWriter_WriteUTF8( writer, ", ", 2) < 0) { 
16141618                Py_DECREF(name); 
16151619                Py_DECREF(value_repr); 
16161620                goto error; 
16171621            } 
16181622        } 
1619-         if (_PyUnicodeWriter_WriteStr(& writer, name) < 0) { 
1623+         if (PyUnicodeWriter_WriteStr( writer, name) < 0) { 
16201624            Py_DECREF(name); 
16211625            Py_DECREF(value_repr); 
16221626            goto error; 
16231627        } 
16241628
16251629        Py_DECREF(name); 
16261630
1627-         if (_PyUnicodeWriter_WriteChar(& writer, '=') < 0) { 
1631+         if (PyUnicodeWriter_WriteChar( writer, '=') < 0) { 
16281632            Py_DECREF(value_repr); 
16291633            goto error; 
16301634        } 
1631-         if (_PyUnicodeWriter_WriteStr(& writer, value_repr) < 0) { 
1635+         if (PyUnicodeWriter_WriteStr( writer, value_repr) < 0) { 
16321636            Py_DECREF(value_repr); 
16331637            goto error; 
16341638        } 
16351639
16361640        Py_DECREF(value_repr); 
16371641    } 
16381642
1639-     if (_PyUnicodeWriter_WriteChar(& writer, ')') < 0) { 
1643+     if (PyUnicodeWriter_WriteChar( writer, ')') < 0) { 
16401644        goto error; 
16411645    } 
16421646    Py_ReprLeave((PyObject *)self); 
16431647    Py_DECREF(fields); 
1644-     return _PyUnicodeWriter_Finish(& writer); 
1648+     return PyUnicodeWriter_Finish( writer); 
16451649
16461650error: 
16471651    Py_ReprLeave((PyObject *)self); 
16481652    Py_DECREF(fields); 
1649-     _PyUnicodeWriter_Dealloc(& writer); 
1653+     PyUnicodeWriter_Discard( writer); 
16501654    return NULL; 
16511655} 
16521656
0 commit comments