@@ -2439,26 +2439,35 @@ class TypeVarLikeExpr(SymbolNode, Expression):
24392439 Note that they are constructed by the semantic analyzer.
24402440 """
24412441
2442- __slots__ = ("_name" , "_fullname" , "upper_bound" , "variance" )
2442+ __slots__ = ("_name" , "_fullname" , "upper_bound" , "default" , " variance" )
24432443
24442444 _name : str
24452445 _fullname : str
24462446 # Upper bound: only subtypes of upper_bound are valid as values. By default
24472447 # this is 'object', meaning no restriction.
24482448 upper_bound : mypy .types .Type
2449+ # Default: used to resolve the TypeVar if the default is not explicitly given.
2450+ # By default this is 'AnyType(TypeOfAny.from_omitted_generics)'. See PEP 696.
2451+ default : mypy .types .Type
24492452 # Variance of the type variable. Invariant is the default.
24502453 # TypeVar(..., covariant=True) defines a covariant type variable.
24512454 # TypeVar(..., contravariant=True) defines a contravariant type
24522455 # variable.
24532456 variance : int
24542457
24552458 def __init__ (
2456- self , name : str , fullname : str , upper_bound : mypy .types .Type , variance : int = INVARIANT
2459+ self ,
2460+ name : str ,
2461+ fullname : str ,
2462+ upper_bound : mypy .types .Type ,
2463+ default : mypy .types .Type ,
2464+ variance : int = INVARIANT ,
24572465 ) -> None :
24582466 super ().__init__ ()
24592467 self ._name = name
24602468 self ._fullname = fullname
24612469 self .upper_bound = upper_bound
2470+ self .default = default
24622471 self .variance = variance
24632472
24642473 @property
@@ -2496,9 +2505,10 @@ def __init__(
24962505 fullname : str ,
24972506 values : list [mypy .types .Type ],
24982507 upper_bound : mypy .types .Type ,
2508+ default : mypy .types .Type ,
24992509 variance : int = INVARIANT ,
25002510 ) -> None :
2501- super ().__init__ (name , fullname , upper_bound , variance )
2511+ super ().__init__ (name , fullname , upper_bound , default , variance )
25022512 self .values = values
25032513
25042514 def accept (self , visitor : ExpressionVisitor [T ]) -> T :
@@ -2511,6 +2521,7 @@ def serialize(self) -> JsonDict:
25112521 "fullname" : self ._fullname ,
25122522 "values" : [t .serialize () for t in self .values ],
25132523 "upper_bound" : self .upper_bound .serialize (),
2524+ "default" : self .default .serialize (),
25142525 "variance" : self .variance ,
25152526 }
25162527
@@ -2522,6 +2533,7 @@ def deserialize(cls, data: JsonDict) -> TypeVarExpr:
25222533 data ["fullname" ],
25232534 [mypy .types .deserialize_type (v ) for v in data ["values" ]],
25242535 mypy .types .deserialize_type (data ["upper_bound" ]),
2536+ mypy .types .deserialize_type (data ["default" ]),
25252537 data ["variance" ],
25262538 )
25272539
@@ -2540,6 +2552,7 @@ def serialize(self) -> JsonDict:
25402552 "name" : self ._name ,
25412553 "fullname" : self ._fullname ,
25422554 "upper_bound" : self .upper_bound .serialize (),
2555+ "default" : self .default .serialize (),
25432556 "variance" : self .variance ,
25442557 }
25452558
@@ -2550,6 +2563,7 @@ def deserialize(cls, data: JsonDict) -> ParamSpecExpr:
25502563 data ["name" ],
25512564 data ["fullname" ],
25522565 mypy .types .deserialize_type (data ["upper_bound" ]),
2566+ mypy .types .deserialize_type (data ["default" ]),
25532567 data ["variance" ],
25542568 )
25552569
@@ -2569,9 +2583,10 @@ def __init__(
25692583 fullname : str ,
25702584 upper_bound : mypy .types .Type ,
25712585 tuple_fallback : mypy .types .Instance ,
2586+ default : mypy .types .Type ,
25722587 variance : int = INVARIANT ,
25732588 ) -> None :
2574- super ().__init__ (name , fullname , upper_bound , variance )
2589+ super ().__init__ (name , fullname , upper_bound , default , variance )
25752590 self .tuple_fallback = tuple_fallback
25762591
25772592 def accept (self , visitor : ExpressionVisitor [T ]) -> T :
@@ -2584,6 +2599,7 @@ def serialize(self) -> JsonDict:
25842599 "fullname" : self ._fullname ,
25852600 "upper_bound" : self .upper_bound .serialize (),
25862601 "tuple_fallback" : self .tuple_fallback .serialize (),
2602+ "default" : self .default .serialize (),
25872603 "variance" : self .variance ,
25882604 }
25892605
@@ -2595,6 +2611,7 @@ def deserialize(cls, data: JsonDict) -> TypeVarTupleExpr:
25952611 data ["fullname" ],
25962612 mypy .types .deserialize_type (data ["upper_bound" ]),
25972613 mypy .types .Instance .deserialize (data ["tuple_fallback" ]),
2614+ mypy .types .deserialize_type (data ["default" ]),
25982615 data ["variance" ],
25992616 )
26002617
0 commit comments