mirror of https://github.com/python/cpython
gh-106145: Make `end_{lineno,col_offset}` required on `type_param` nodes (#106224)
This commit is contained in:
parent
904aef9942
commit
46c1097868
|
@ -705,7 +705,7 @@ class DirectoryTestCase(ASTTestCase):
|
||||||
test_directories = (lib_dir, lib_dir / "test")
|
test_directories = (lib_dir, lib_dir / "test")
|
||||||
run_always_files = {"test_grammar.py", "test_syntax.py", "test_compile.py",
|
run_always_files = {"test_grammar.py", "test_syntax.py", "test_compile.py",
|
||||||
"test_ast.py", "test_asdl_parser.py", "test_fstring.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
|
_files_to_test = None
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Make ``end_lineno`` and ``end_col_offset`` required on ``type_param`` ast
|
||||||
|
nodes.
|
|
@ -148,5 +148,5 @@ module Python
|
||||||
type_param = TypeVar(identifier name, expr? bound)
|
type_param = TypeVar(identifier name, expr? bound)
|
||||||
| ParamSpec(identifier name)
|
| ParamSpec(identifier name)
|
||||||
| TypeVarTuple(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)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1902,12 +1902,6 @@ init_types(struct ast_state *state)
|
||||||
if (!state->type_param_type) return 0;
|
if (!state->type_param_type) return 0;
|
||||||
if (!add_attributes(state, state->type_param_type, type_param_attributes,
|
if (!add_attributes(state, state->type_param_type, type_param_attributes,
|
||||||
4)) return 0;
|
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,
|
state->TypeVar_type = make_type(state, "TypeVar", state->type_param_type,
|
||||||
TypeVar_fields, 2,
|
TypeVar_fields, 2,
|
||||||
"TypeVar(identifier name, expr? bound)");
|
"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) {
|
if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if (tmp == NULL || tmp == Py_None) {
|
if (tmp == NULL) {
|
||||||
Py_CLEAR(tmp);
|
PyErr_SetString(PyExc_TypeError, "required field \"end_lineno\" missing from type_param");
|
||||||
end_lineno = lineno;
|
return 1;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
int res;
|
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) {
|
if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if (tmp == NULL || tmp == Py_None) {
|
if (tmp == NULL) {
|
||||||
Py_CLEAR(tmp);
|
PyErr_SetString(PyExc_TypeError, "required field \"end_col_offset\" missing from type_param");
|
||||||
end_col_offset = col_offset;
|
return 1;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
int res;
|
int res;
|
||||||
|
|
Loading…
Reference in New Issue