63
63
YieldFromExpr , NamedTupleExpr , NonlocalDecl ,
64
64
SetComprehension , DictionaryComprehension , TYPE_ALIAS , TypeAliasExpr ,
65
65
YieldExpr , ExecStmt , Argument , BackquoteExpr , ImportBase , AwaitExpr ,
66
- IntExpr , FloatExpr , UnicodeExpr ,
67
- Expression , EllipsisExpr , namedtuple_type_info ,
66
+ IntExpr , FloatExpr , UnicodeExpr , EllipsisExpr ,
68
67
COVARIANT , CONTRAVARIANT , INVARIANT , UNBOUND_IMPORTED , LITERAL_YES ,
69
68
)
70
69
from mypy .visitor import NodeVisitor
@@ -1413,13 +1412,7 @@ def check_newtype_args(self, name: str, call: CallExpr, context: Context) -> Opt
1413
1412
return None if has_failed else old_type
1414
1413
1415
1414
def build_newtype_typeinfo (self , name : str , old_type : Type , base_type : Instance ) -> TypeInfo :
1416
- class_def = ClassDef (name , Block ([]))
1417
- class_def .fullname = self .qualified_name (name )
1418
-
1419
- symbols = SymbolTable ()
1420
- info = TypeInfo (symbols , class_def , self .cur_mod_id )
1421
- info .mro = [info ] + base_type .type .mro
1422
- info .bases = [base_type ]
1415
+ info = self .basic_new_typeinfo (name , base_type )
1423
1416
info .is_newtype = True
1424
1417
1425
1418
# Add __init__ method
@@ -1434,7 +1427,7 @@ def build_newtype_typeinfo(self, name: str, old_type: Type, base_type: Instance)
1434
1427
name = name )
1435
1428
init_func = FuncDef ('__init__' , args , Block ([]), typ = signature )
1436
1429
init_func .info = info
1437
- symbols ['__init__' ] = SymbolTableNode (MDEF , init_func )
1430
+ info . names ['__init__' ] = SymbolTableNode (MDEF , init_func )
1438
1431
1439
1432
return info
1440
1433
@@ -1690,6 +1683,15 @@ def fail_namedtuple_arg(self, message: str,
1690
1683
self .fail (message , context )
1691
1684
return [], [], False
1692
1685
1686
+ def basic_new_typeinfo (self , name : str , basetype_or_fallback : Instance ) -> TypeInfo :
1687
+ class_def = ClassDef (name , Block ([]))
1688
+ class_def .fullname = self .qualified_name (name )
1689
+
1690
+ info = TypeInfo (SymbolTable (), class_def , self .cur_mod_id )
1691
+ info .mro = [info ] + basetype_or_fallback .type .mro
1692
+ info .bases = [basetype_or_fallback ]
1693
+ return info
1694
+
1693
1695
def build_namedtuple_typeinfo (self , name : str , items : List [str ],
1694
1696
types : List [Type ]) -> TypeInfo :
1695
1697
strtype = self .named_type ('__builtins__.str' ) # type: Type
@@ -1704,20 +1706,17 @@ def build_namedtuple_typeinfo(self, name: str, items: List[str],
1704
1706
# but it can't be expressed. 'new' and 'len' should be callable types.
1705
1707
iterable_type = self .named_type_or_none ('typing.Iterable' , [AnyType ()])
1706
1708
function_type = self .named_type ('__builtins__.function' )
1707
- fullname = self .qualified_name (name )
1708
1709
1709
- symbols = SymbolTable ()
1710
- class_def = ClassDef (name , Block ([]))
1711
- class_def .fullname = fullname
1712
- info = namedtuple_type_info (TupleType (types , fallback ), symbols ,
1713
- class_def , self .cur_mod_id )
1710
+ info = self .basic_new_typeinfo (name , fallback )
1711
+ info .is_named_tuple = True
1712
+ info .tuple_type = TupleType (types , fallback )
1714
1713
1715
1714
def add_field (var : Var , is_initialized_in_class : bool = False ,
1716
1715
is_property : bool = False ) -> None :
1717
1716
var .info = info
1718
1717
var .is_initialized_in_class = is_initialized_in_class
1719
1718
var .is_property = is_property
1720
- symbols [var .name ()] = SymbolTableNode (MDEF , var )
1719
+ info . names [var .name ()] = SymbolTableNode (MDEF , var )
1721
1720
1722
1721
vars = [Var (item , typ ) for item , typ in zip (items , types )]
1723
1722
for var in vars :
@@ -1744,7 +1743,7 @@ def add_method(funcname: str, ret: Type, args: List[Argument], name=None,
1744
1743
func = FuncDef (funcname , args , Block ([]), typ = signature )
1745
1744
func .info = info
1746
1745
func .is_class = is_classmethod
1747
- symbols [funcname ] = SymbolTableNode (MDEF , func )
1746
+ info . names [funcname ] = SymbolTableNode (MDEF , func )
1748
1747
1749
1748
add_method ('_replace' , ret = this_type ,
1750
1749
args = [Argument (var , var .type , EllipsisExpr (), ARG_NAMED ) for var in vars ])
0 commit comments