@@ -909,16 +909,18 @@ def visit_assignment_stmt(self, s: AssignmentStmt) -> Type:
909909
910910 Handle all kinds of assignment statements (simple, indexed, multiple).
911911 """
912- self .check_assignments (self .expand_lvalues (s .lvalues [- 1 ]), s .rvalue )
912+ self .check_assignments (self .expand_lvalues (s .lvalues [- 1 ]), s .rvalue ,
913+ s .type )
913914 if len (s .lvalues ) > 1 :
914915 # Chained assignment (e.g. x = y = ...).
915916 # Make sure that rvalue type will not be reinferred.
916917 rvalue = self .temp_node (self .type_map [s .rvalue ], s )
917918 for lv in s .lvalues [:- 1 ]:
918- self .check_assignments (self .expand_lvalues (lv ), rvalue )
919+ self .check_assignments (self .expand_lvalues (lv ), rvalue ,
920+ s .type )
919921
920922 def check_assignments (self , lvalues : List [Node ],
921- rvalue : Node ) -> None :
923+ rvalue : Node , force_rvalue_type : Type = None ) -> None :
922924 # Collect lvalue types. Index lvalues require special consideration,
923925 # since we cannot typecheck them until we know the rvalue type.
924926 # For each lvalue, one of lvalue_types[i] or index_lvalues[i] is not
@@ -964,12 +966,12 @@ def check_assignments(self, lvalues: List[Node],
964966 # Single lvalue.
965967 rvalue_type = self .check_single_assignment (lvalue_types [0 ],
966968 index_lvalues [0 ], rvalue , rvalue )
967- if rvalue_type :
969+ if rvalue_type and not force_rvalue_type :
968970 self .binder .assign_type (lvalues [0 ], rvalue_type )
969971 else :
970972 rvalue_types = self .check_multi_assignment (lvalue_types , index_lvalues ,
971973 rvalue , rvalue )
972- if rvalue_types :
974+ if rvalue_types and not force_rvalue_type :
973975 for lv , rt in zip (lvalues , rvalue_types ):
974976 self .binder .assign_type (lv , rt )
975977 if is_inferred :
0 commit comments