mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
gh-119182: Use public PyUnicodeWriter in Python-ast.c (#129209)
Replace the private _PyUnicodeWriter API with the public PyUnicodeWriter API. Use PyUnicodeWriter_WriteRepr() in ast_repr_list().
This commit is contained in:
parent
8eb9e76b5b
commit
0093a31273
2 changed files with 86 additions and 78 deletions
82
Python/Python-ast.c
generated
82
Python/Python-ast.c
generated
|
@ -5661,10 +5661,11 @@ ast_repr_list(PyObject *list, int depth)
|
|||
return PyObject_Repr(list);
|
||||
}
|
||||
|
||||
_PyUnicodeWriter writer;
|
||||
_PyUnicodeWriter_Init(&writer);
|
||||
writer.overallocate = 1;
|
||||
PyObject *items[2] = {NULL, NULL};
|
||||
PyUnicodeWriter *writer = PyUnicodeWriter_Create(0);
|
||||
if (writer == NULL) {
|
||||
goto error;
|
||||
}
|
||||
|
||||
items[0] = PySequence_GetItem(list, 0);
|
||||
if (!items[0]) {
|
||||
|
@ -5678,52 +5679,54 @@ ast_repr_list(PyObject *list, int depth)
|
|||
}
|
||||
|
||||
bool is_list = PyList_Check(list);
|
||||
if (_PyUnicodeWriter_WriteChar(&writer, is_list ? '[' : '(') < 0) {
|
||||
if (PyUnicodeWriter_WriteChar(writer, is_list ? '[' : '(') < 0) {
|
||||
goto error;
|
||||
}
|
||||
|
||||
for (Py_ssize_t i = 0; i < Py_MIN(length, 2); i++) {
|
||||
PyObject *item = items[i];
|
||||
PyObject *item_repr;
|
||||
|
||||
if (PyType_IsSubtype(Py_TYPE(item), (PyTypeObject *)state->AST_type)) {
|
||||
item_repr = ast_repr_max_depth((AST_object*)item, depth - 1);
|
||||
} else {
|
||||
item_repr = PyObject_Repr(item);
|
||||
}
|
||||
if (!item_repr) {
|
||||
goto error;
|
||||
}
|
||||
if (i > 0) {
|
||||
if (_PyUnicodeWriter_WriteASCIIString(&writer, ", ", 2) < 0) {
|
||||
if (PyUnicodeWriter_WriteUTF8(writer, ", ", 2) < 0) {
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
if (_PyUnicodeWriter_WriteStr(&writer, item_repr) < 0) {
|
||||
Py_DECREF(item_repr);
|
||||
goto error;
|
||||
}
|
||||
if (i == 0 && length > 2) {
|
||||
if (_PyUnicodeWriter_WriteASCIIString(&writer, ", ...", 5) < 0) {
|
||||
|
||||
PyObject *item = items[i];
|
||||
if (PyType_IsSubtype(Py_TYPE(item), (PyTypeObject *)state->AST_type)) {
|
||||
PyObject *item_repr;
|
||||
item_repr = ast_repr_max_depth((AST_object*)item, depth - 1);
|
||||
if (!item_repr) {
|
||||
goto error;
|
||||
}
|
||||
if (PyUnicodeWriter_WriteStr(writer, item_repr) < 0) {
|
||||
Py_DECREF(item_repr);
|
||||
goto error;
|
||||
}
|
||||
Py_DECREF(item_repr);
|
||||
} else {
|
||||
if (PyUnicodeWriter_WriteRepr(writer, item) < 0) {
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
|
||||
if (i == 0 && length > 2) {
|
||||
if (PyUnicodeWriter_WriteUTF8(writer, ", ...", 5) < 0) {
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
Py_DECREF(item_repr);
|
||||
}
|
||||
|
||||
if (_PyUnicodeWriter_WriteChar(&writer, is_list ? ']' : ')') < 0) {
|
||||
if (PyUnicodeWriter_WriteChar(writer, is_list ? ']' : ')') < 0) {
|
||||
goto error;
|
||||
}
|
||||
|
||||
Py_XDECREF(items[0]);
|
||||
Py_XDECREF(items[1]);
|
||||
return _PyUnicodeWriter_Finish(&writer);
|
||||
return PyUnicodeWriter_Finish(writer);
|
||||
|
||||
error:
|
||||
Py_XDECREF(items[0]);
|
||||
Py_XDECREF(items[1]);
|
||||
_PyUnicodeWriter_Dealloc(&writer);
|
||||
PyUnicodeWriter_Discard(writer);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -5767,14 +5770,15 @@ ast_repr_max_depth(AST_object *self, int depth)
|
|||
}
|
||||
|
||||
const char* tp_name = Py_TYPE(self)->tp_name;
|
||||
_PyUnicodeWriter writer;
|
||||
_PyUnicodeWriter_Init(&writer);
|
||||
writer.overallocate = 1;
|
||||
|
||||
if (_PyUnicodeWriter_WriteASCIIString(&writer, tp_name, strlen(tp_name)) < 0) {
|
||||
PyUnicodeWriter *writer = PyUnicodeWriter_Create(0);
|
||||
if (writer == NULL) {
|
||||
goto error;
|
||||
}
|
||||
if (_PyUnicodeWriter_WriteChar(&writer, '(') < 0) {
|
||||
|
||||
if (PyUnicodeWriter_WriteUTF8(writer, tp_name, -1) < 0) {
|
||||
goto error;
|
||||
}
|
||||
if (PyUnicodeWriter_WriteChar(writer, '(') < 0) {
|
||||
goto error;
|
||||
}
|
||||
|
||||
|
@ -5809,13 +5813,13 @@ ast_repr_max_depth(AST_object *self, int depth)
|
|||
}
|
||||
|
||||
if (i > 0) {
|
||||
if (_PyUnicodeWriter_WriteASCIIString(&writer, ", ", 2) < 0) {
|
||||
if (PyUnicodeWriter_WriteUTF8(writer, ", ", 2) < 0) {
|
||||
Py_DECREF(name);
|
||||
Py_DECREF(value_repr);
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
if (_PyUnicodeWriter_WriteStr(&writer, name) < 0) {
|
||||
if (PyUnicodeWriter_WriteStr(writer, name) < 0) {
|
||||
Py_DECREF(name);
|
||||
Py_DECREF(value_repr);
|
||||
goto error;
|
||||
|
@ -5823,11 +5827,11 @@ ast_repr_max_depth(AST_object *self, int depth)
|
|||
|
||||
Py_DECREF(name);
|
||||
|
||||
if (_PyUnicodeWriter_WriteChar(&writer, '=') < 0) {
|
||||
if (PyUnicodeWriter_WriteChar(writer, '=') < 0) {
|
||||
Py_DECREF(value_repr);
|
||||
goto error;
|
||||
}
|
||||
if (_PyUnicodeWriter_WriteStr(&writer, value_repr) < 0) {
|
||||
if (PyUnicodeWriter_WriteStr(writer, value_repr) < 0) {
|
||||
Py_DECREF(value_repr);
|
||||
goto error;
|
||||
}
|
||||
|
@ -5835,17 +5839,17 @@ ast_repr_max_depth(AST_object *self, int depth)
|
|||
Py_DECREF(value_repr);
|
||||
}
|
||||
|
||||
if (_PyUnicodeWriter_WriteChar(&writer, ')') < 0) {
|
||||
if (PyUnicodeWriter_WriteChar(writer, ')') < 0) {
|
||||
goto error;
|
||||
}
|
||||
Py_ReprLeave((PyObject *)self);
|
||||
Py_DECREF(fields);
|
||||
return _PyUnicodeWriter_Finish(&writer);
|
||||
return PyUnicodeWriter_Finish(writer);
|
||||
|
||||
error:
|
||||
Py_ReprLeave((PyObject *)self);
|
||||
Py_DECREF(fields);
|
||||
_PyUnicodeWriter_Dealloc(&writer);
|
||||
PyUnicodeWriter_Discard(writer);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue