Skip to content

Commit f545fc9

Browse files
gh-93345: Fix a crash in substitution of nested TypeVar after TypeVarTuple (GH-93346)
For example: tuple[*Ts, list[T]][int, str, bool]
1 parent 5893b5d commit f545fc9

File tree

3 files changed

+10
-2
lines changed

3 files changed

+10
-2
lines changed

Lib/test/test_typing.py

+7-1
Original file line numberDiff line numberDiff line change
@@ -768,12 +768,18 @@ class C(Generic[*Ts]): pass
768768
('generic[T, *Ts]', '[int]', 'generic[int]'),
769769
('generic[T, *Ts]', '[int, str]', 'generic[int, str]'),
770770
('generic[T, *Ts]', '[int, str, bool]', 'generic[int, str, bool]'),
771+
('generic[list[T], *Ts]', '[int]', 'generic[list[int]]'),
772+
('generic[list[T], *Ts]', '[int, str]', 'generic[list[int], str]'),
773+
('generic[list[T], *Ts]', '[int, str, bool]', 'generic[list[int], str, bool]'),
771774

772775
('generic[T, *Ts]', '[*tuple[int, ...]]', 'TypeError'), # Should be generic[int, *tuple[int, ...]]
773776

774777
('generic[*Ts, T]', '[int]', 'generic[int]'),
775778
('generic[*Ts, T]', '[int, str]', 'generic[int, str]'),
776-
('generic[*Ts, T]', '[int, str, bool]', 'generic[int, str, bool]'),
779+
('generic[*Ts, T]', '[int, str, bool]', 'generic[int, str, bool]'),
780+
('generic[*Ts, list[T]]', '[int]', 'generic[list[int]]'),
781+
('generic[*Ts, list[T]]', '[int, str]', 'generic[int, list[str]]'),
782+
('generic[*Ts, list[T]]', '[int, str, bool]', 'generic[int, str, list[bool]]'),
777783

778784
('generic[T, *tuple_type[int, ...]]', '[str]', 'generic[str, *tuple_type[int, ...]]'),
779785
('generic[T1, T2, *tuple_type[int, ...]]', '[str, bool]', 'generic[str, bool, *tuple_type[int, ...]]'),
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Fix a crash in substitution of a ``TypeVar`` in nested generic alias after
2+
``TypeVarTuple``.

Objects/genericaliasobject.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,7 @@ subs_tvars(PyObject *obj, PyObject *params,
296296
else {
297297
if (iparam >= 0) {
298298
if (iparam > varparam) {
299-
iparam += nargs - nsubargs;
299+
iparam += nargs - nparams;
300300
}
301301
arg = argitems[iparam];
302302
}

0 commit comments

Comments
 (0)