@@ -807,13 +807,17 @@ void ResolveVisitor::PostVisitComprehensionSubexpression(
807807 break ;
808808 case ComprehensionArg::ITER_RANGE: {
809809 Type range_type = GetTypeOrDyn (&comprehension.iter_range ());
810- Type iter_type = DynType ();
810+ Type iter_type = DynType (); // iter_var for non comprehensions v2.
811+ Type iter_type1 = DynType (); // iter_var for comprehensions v2.
812+ Type iter_type2 = DynType (); // iter_var2 for comprehensions v2.
811813 switch (range_type.kind ()) {
812814 case TypeKind::kList :
813- iter_type = range_type.GetList ().element ();
815+ iter_type1 = IntType ();
816+ iter_type = iter_type2 = range_type.GetList ().element ();
814817 break ;
815818 case TypeKind::kMap :
816- iter_type = range_type.GetMap ().key ();
819+ iter_type = iter_type1 = range_type.GetMap ().key ();
820+ iter_type2 = range_type.GetMap ().value ();
817821 break ;
818822 case TypeKind::kDyn :
819823 break ;
@@ -827,8 +831,15 @@ void ResolveVisitor::PostVisitComprehensionSubexpression(
827831 " list, map, or dynamic)" )));
828832 break ;
829833 }
830- scope.iter_scope ->InsertVariableIfAbsent (
831- MakeVariableDecl (comprehension.iter_var (), iter_type));
834+ if (comprehension.iter_var2 ().empty ()) {
835+ scope.iter_scope ->InsertVariableIfAbsent (
836+ MakeVariableDecl (comprehension.iter_var (), iter_type));
837+ } else {
838+ scope.iter_scope ->InsertVariableIfAbsent (
839+ MakeVariableDecl (comprehension.iter_var (), iter_type1));
840+ scope.iter_scope ->InsertVariableIfAbsent (
841+ MakeVariableDecl (comprehension.iter_var2 (), iter_type2));
842+ }
832843 break ;
833844 }
834845 case ComprehensionArg::RESULT:
0 commit comments