[Python-checkins] gh-93345: Fix a crash in substitution of nested TypeVar after TypeVarTuple (GH-93346)
serhiy-storchaka
webhook-mailer at python.org
Tue May 31 01:46:20 EDT 2022
https://github.com/python/cpython/commit/f545fc955aeb701ae4e73b07ff2283f823d857b8
commit: f545fc955aeb701ae4e73b07ff2283f823d857b8
branch: main
author: Serhiy Storchaka <storchaka at gmail.com>
committer: serhiy-storchaka <storchaka at gmail.com>
date: 2022-05-31T08:46:16+03:00
summary:
gh-93345: Fix a crash in substitution of nested TypeVar after TypeVarTuple (GH-93346)
For example: tuple[*Ts, list[T]][int, str, bool]
files:
A Misc/NEWS.d/next/Core and Builtins/2022-05-30-10-22-46.gh-issue-93345.gi1A4L.rst
M Lib/test/test_typing.py
M Objects/genericaliasobject.c
diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py
index 2afac23539155..d6cd3d9bdd6a4 100644
--- a/Lib/test/test_typing.py
+++ b/Lib/test/test_typing.py
@@ -768,12 +768,18 @@ class C(Generic[*Ts]): pass
('generic[T, *Ts]', '[int]', 'generic[int]'),
('generic[T, *Ts]', '[int, str]', 'generic[int, str]'),
('generic[T, *Ts]', '[int, str, bool]', 'generic[int, str, bool]'),
+ ('generic[list[T], *Ts]', '[int]', 'generic[list[int]]'),
+ ('generic[list[T], *Ts]', '[int, str]', 'generic[list[int], str]'),
+ ('generic[list[T], *Ts]', '[int, str, bool]', 'generic[list[int], str, bool]'),
('generic[T, *Ts]', '[*tuple[int, ...]]', 'TypeError'), # Should be generic[int, *tuple[int, ...]]
('generic[*Ts, T]', '[int]', 'generic[int]'),
('generic[*Ts, T]', '[int, str]', 'generic[int, str]'),
- ('generic[*Ts, T]', '[int, str, bool]', 'generic[int, str, bool]'),
+ ('generic[*Ts, T]', '[int, str, bool]', 'generic[int, str, bool]'),
+ ('generic[*Ts, list[T]]', '[int]', 'generic[list[int]]'),
+ ('generic[*Ts, list[T]]', '[int, str]', 'generic[int, list[str]]'),
+ ('generic[*Ts, list[T]]', '[int, str, bool]', 'generic[int, str, list[bool]]'),
('generic[T, *tuple_type[int, ...]]', '[str]', 'generic[str, *tuple_type[int, ...]]'),
('generic[T1, T2, *tuple_type[int, ...]]', '[str, bool]', 'generic[str, bool, *tuple_type[int, ...]]'),
diff --git a/Misc/NEWS.d/next/Core and Builtins/2022-05-30-10-22-46.gh-issue-93345.gi1A4L.rst b/Misc/NEWS.d/next/Core and Builtins/2022-05-30-10-22-46.gh-issue-93345.gi1A4L.rst
new file mode 100644
index 0000000000000..4cdb37cfe4698
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2022-05-30-10-22-46.gh-issue-93345.gi1A4L.rst
@@ -0,0 +1,2 @@
+Fix a crash in substitution of a ``TypeVar`` in nested generic alias after
+``TypeVarTuple``.
diff --git a/Objects/genericaliasobject.c b/Objects/genericaliasobject.c
index 39fd70999ecbe..59420816496f0 100644
--- a/Objects/genericaliasobject.c
+++ b/Objects/genericaliasobject.c
@@ -296,7 +296,7 @@ subs_tvars(PyObject *obj, PyObject *params,
else {
if (iparam >= 0) {
if (iparam > varparam) {
- iparam += nargs - nsubargs;
+ iparam += nargs - nparams;
}
arg = argitems[iparam];
}
More information about the Python-checkins
mailing list