]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-106145: Make `end_{lineno,col_offset}` required on `type_param` nodes (#106224)
authorNikita Sobolev <mail@sobolevn.me>
Fri, 30 Jun 2023 23:45:08 +0000 (02:45 +0300)
committerGitHub <noreply@github.com>
Fri, 30 Jun 2023 23:45:08 +0000 (23:45 +0000)
Lib/test/test_unparse.py
Misc/NEWS.d/next/Core and Builtins/2023-06-29-09-46-41.gh-issue-106145.QC6-Kq.rst [new file with mode: 0644]
Parser/Python.asdl
Python/Python-ast.c

index 41a6318d1499b49eaa4d66a439d92d2804dba566..b3efb61e83049e19c88a515defbef46dfeebfb27 100644 (file)
@@ -705,7 +705,7 @@ class DirectoryTestCase(ASTTestCase):
     test_directories = (lib_dir, lib_dir / "test")
     run_always_files = {"test_grammar.py", "test_syntax.py", "test_compile.py",
                         "test_ast.py", "test_asdl_parser.py", "test_fstring.py",
-                        "test_patma.py"}
+                        "test_patma.py", "test_type_alias.py", "test_type_params.py"}
 
     _files_to_test = None
 
diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-06-29-09-46-41.gh-issue-106145.QC6-Kq.rst b/Misc/NEWS.d/next/Core and Builtins/2023-06-29-09-46-41.gh-issue-106145.QC6-Kq.rst
new file mode 100644 (file)
index 0000000..4f9445b
--- /dev/null
@@ -0,0 +1,2 @@
+Make ``end_lineno`` and ``end_col_offset`` required on ``type_param`` ast
+nodes.
index 93632a09f0959b004f08e7c84e53db808fbc9fee..0d154867276c363da8042329cfc83babd8a1a06a 100644 (file)
@@ -148,5 +148,5 @@ module Python
     type_param = TypeVar(identifier name, expr? bound)
                | ParamSpec(identifier name)
                | TypeVarTuple(identifier name)
-               attributes (int lineno, int col_offset, int? end_lineno, int? end_col_offset)
+               attributes (int lineno, int col_offset, int end_lineno, int end_col_offset)
 }
index 1ffb8354e3a1b11f27c3a361683d92664538648f..5db9ade3af4547ad90516ba4dbe1d3a47e235b16 100644 (file)
@@ -1902,12 +1902,6 @@ init_types(struct ast_state *state)
     if (!state->type_param_type) return 0;
     if (!add_attributes(state, state->type_param_type, type_param_attributes,
         4)) return 0;
-    if (PyObject_SetAttr(state->type_param_type, state->end_lineno, Py_None) ==
-        -1)
-        return 0;
-    if (PyObject_SetAttr(state->type_param_type, state->end_col_offset,
-        Py_None) == -1)
-        return 0;
     state->TypeVar_type = make_type(state, "TypeVar", state->type_param_type,
                                     TypeVar_fields, 2,
         "TypeVar(identifier name, expr? bound)");
@@ -12500,9 +12494,9 @@ obj2ast_type_param(struct ast_state *state, PyObject* obj, type_param_ty* out,
     if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) {
         return 1;
     }
-    if (tmp == NULL || tmp == Py_None) {
-        Py_CLEAR(tmp);
-        end_lineno = lineno;
+    if (tmp == NULL) {
+        PyErr_SetString(PyExc_TypeError, "required field \"end_lineno\" missing from type_param");
+        return 1;
     }
     else {
         int res;
@@ -12517,9 +12511,9 @@ obj2ast_type_param(struct ast_state *state, PyObject* obj, type_param_ty* out,
     if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) {
         return 1;
     }
-    if (tmp == NULL || tmp == Py_None) {
-        Py_CLEAR(tmp);
-        end_col_offset = col_offset;
+    if (tmp == NULL) {
+        PyErr_SetString(PyExc_TypeError, "required field \"end_col_offset\" missing from type_param");
+        return 1;
     }
     else {
         int res;