summaryrefslogtreecommitdiffstats
path: root/Python/Python-ast.c
diff options
context:
space:
mode:
Diffstat (limited to 'Python/Python-ast.c')
-rw-r--r--Python/Python-ast.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/Python/Python-ast.c b/Python/Python-ast.c
index 7b591dd..60b4626 100644
--- a/Python/Python-ast.c
+++ b/Python/Python-ast.c
@@ -5119,11 +5119,22 @@ ast_type_init(PyObject *self, PyObject *args, PyObject *kw)
Py_ssize_t size = PySet_Size(remaining_fields);
PyObject *field_types = NULL, *remaining_list = NULL;
if (size > 0) {
- if (!PyObject_GetOptionalAttr((PyObject*)Py_TYPE(self), &_Py_ID(_field_types),
- &field_types)) {
+ if (PyObject_GetOptionalAttr((PyObject*)Py_TYPE(self), &_Py_ID(_field_types),
+ &field_types) < 0) {
res = -1;
goto cleanup;
}
+ if (field_types == NULL) {
+ if (PyErr_WarnFormat(
+ PyExc_DeprecationWarning, 1,
+ "%.400s provides _fields but not _field_types. "
+ "This will become an error in Python 3.15.",
+ Py_TYPE(self)->tp_name
+ ) < 0) {
+ res = -1;
+ }
+ goto cleanup;
+ }
remaining_list = PySequence_List(remaining_fields);
if (!remaining_list) {
goto set_remaining_cleanup;