Skip to content

Commit

Permalink
[backport] Fix crash on deferred value constrained TypeVar (#14642) (#…
Browse files Browse the repository at this point in the history
…14655)

Fixes #14631

Co-authored-by: Shantanu <[email protected]>
  • Loading branch information
ilinum and hauntsaninja authored Feb 9, 2023
1 parent b562f53 commit 0c99585
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 2 deletions.
8 changes: 6 additions & 2 deletions mypy/types.py
Original file line number Diff line number Diff line change
Expand Up @@ -587,12 +587,16 @@ def accept(self, visitor: TypeVisitor[T]) -> T:
return visitor.visit_type_var(self)

def __hash__(self) -> int:
return hash((self.id, self.upper_bound))
return hash((self.id, self.upper_bound, tuple(self.values)))

def __eq__(self, other: object) -> bool:
if not isinstance(other, TypeVarType):
return NotImplemented
return self.id == other.id and self.upper_bound == other.upper_bound
return (
self.id == other.id
and self.upper_bound == other.upper_bound
and self.values == other.values
)

def serialize(self) -> JsonDict:
assert not self.id.is_meta_var()
Expand Down
9 changes: 9 additions & 0 deletions test-data/unit/check-typevar-values.test
Original file line number Diff line number Diff line change
Expand Up @@ -702,3 +702,12 @@ class Indexable:

[builtins fixtures/tuple.pyi]
[builtins fixtures/classmethod.pyi]

[case testTypeVarWithValueDeferral]
from typing import TypeVar, Callable

T = TypeVar("T", "A", "B")
Func = Callable[[], T]

class A: ...
class B: ...

0 comments on commit 0c99585

Please sign in to comment.