@@ -1799,7 +1799,7 @@ impl<'a> Parser<'a> {
17991799 && matches ! (
18001800 expr. kind,
18011801 ExprKind :: While ( _, _, None )
1802- | ExprKind :: ForLoop ( _ , _ , _ , None )
1802+ | ExprKind :: ForLoop { label : None , .. }
18031803 | ExprKind :: Loop ( _, None , _)
18041804 | ExprKind :: Block ( _, None )
18051805 )
@@ -2672,8 +2672,14 @@ impl<'a> Parser<'a> {
26722672 Ok ( ( pat, expr) )
26732673 }
26742674
2675- /// Parses `for <src_pat> in <src_expr> <src_loop_block>` (`for` token already eaten).
2675+ /// Parses `for await? <src_pat> in <src_expr> <src_loop_block>` (`for` token already eaten).
26762676 fn parse_expr_for ( & mut self , opt_label : Option < Label > , lo : Span ) -> PResult < ' a , P < Expr > > {
2677+ let is_await = self . eat_keyword ( kw:: Await ) ;
2678+
2679+ if is_await {
2680+ self . sess . gated_spans . gate ( sym:: async_iterator, self . prev_token . span ) ;
2681+ }
2682+
26772683 let ( pat, expr) = self . parse_for_head ( ) ?;
26782684 // Recover from missing expression in `for` loop
26792685 if matches ! ( expr. kind, ExprKind :: Block ( ..) )
@@ -2686,13 +2692,14 @@ impl<'a> Parser<'a> {
26862692 let block = self . mk_block ( thin_vec ! [ ] , BlockCheckMode :: Default , self . prev_token . span ) ;
26872693 return Ok ( self . mk_expr (
26882694 lo. to ( self . prev_token . span ) ,
2689- ExprKind :: ForLoop ( pat, err_expr, block, opt_label) ,
2695+ ExprKind :: ForLoop { pat, iter : err_expr, body : block, label : opt_label, is_await } ,
26902696 ) ) ;
26912697 }
26922698
26932699 let ( attrs, loop_block) = self . parse_inner_attrs_and_block ( ) ?;
26942700
2695- let kind = ExprKind :: ForLoop ( pat, expr, loop_block, opt_label) ;
2701+ let kind =
2702+ ExprKind :: ForLoop { pat, iter : expr, body : loop_block, label : opt_label, is_await } ;
26962703
26972704 self . recover_loop_else ( "for" , lo) ?;
26982705
@@ -3770,7 +3777,7 @@ impl MutVisitor for CondChecker<'_> {
37703777 | ExprKind :: Lit ( _)
37713778 | ExprKind :: If ( _, _, _)
37723779 | ExprKind :: While ( _, _, _)
3773- | ExprKind :: ForLoop ( _ , _ , _ , _ )
3780+ | ExprKind :: ForLoop { .. }
37743781 | ExprKind :: Loop ( _, _, _)
37753782 | ExprKind :: Match ( _, _)
37763783 | ExprKind :: Closure ( _)
0 commit comments