summaryrefslogtreecommitdiffstats
path: root/Python/Python-ast.c
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2025-01-23 00:57:37 (GMT)
committerGitHub <noreply@github.com>2025-01-23 00:57:37 (GMT)
commit0093a31273898930e5fb19ff5d1655c4458a2056 (patch)
treef8a4851e6c1418cf7dda0a8910b9775f48ad508b /Python/Python-ast.c
parent8eb9e76b5b2471031d6ad48ee3bc4554bb0067b7 (diff)
downloadcpython-0093a31273898930e5fb19ff5d1655c4458a2056.zip
cpython-0093a31273898930e5fb19ff5d1655c4458a2056.tar.gz
cpython-0093a31273898930e5fb19ff5d1655c4458a2056.tar.bz2
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().
Diffstat (limited to 'Python/Python-ast.c')
-rw-r--r--Python/Python-ast.c74
1 files changed, 39 insertions, 35 deletions
diff --git a/Python/Python-ast.c b/Python/Python-ast.c
index 41299b2..7038e3c 100644
--- a/Python/Python-ast.c
+++ b/Python/Python-ast.c
@@ -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 (i > 0) {
+ if (PyUnicodeWriter_WriteUTF8(writer, ", ", 2) < 0) {
+ goto error;
+ }
+ }
+ 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);
- } else {
- item_repr = PyObject_Repr(item);
- }
- if (!item_repr) {
- goto error;
- }
- if (i > 0) {
- if (_PyUnicodeWriter_WriteASCIIString(&writer, ", ", 2) < 0) {
+ if (!item_repr) {
+ goto error;
+ }
+ if (PyUnicodeWriter_WriteStr(writer, item_repr) < 0) {
+ Py_DECREF(item_repr);
goto error;
}
- }
- if (_PyUnicodeWriter_WriteStr(&writer, item_repr) < 0) {
Py_DECREF(item_repr);
- goto error;
+ } else {
+ if (PyUnicodeWriter_WriteRepr(writer, item) < 0) {
+ goto error;
+ }
}
+
if (i == 0 && length > 2) {
- if (_PyUnicodeWriter_WriteASCIIString(&writer, ", ...", 5) < 0) {
- Py_DECREF(item_repr);
+ 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;
+ PyUnicodeWriter *writer = PyUnicodeWriter_Create(0);
+ if (writer == NULL) {
+ goto error;
+ }
- if (_PyUnicodeWriter_WriteASCIIString(&writer, tp_name, strlen(tp_name)) < 0) {
+ if (PyUnicodeWriter_WriteUTF8(writer, tp_name, -1) < 0) {
goto error;
}
- if (_PyUnicodeWriter_WriteChar(&writer, '(') < 0) {
+ 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;
}