@@ -1800,7 +1800,7 @@ impl<'a> Parser<'a> {
18001800 && matches ! (
18011801 expr. kind,
18021802 ExprKind :: While ( _, _, None )
1803- | ExprKind :: ForLoop ( _ , _ , _ , None )
1803+ | ExprKind :: ForLoop { label : None , .. }
18041804 | ExprKind :: Loop ( _, None , _)
18051805 | ExprKind :: Block ( _, None )
18061806 )
@@ -2681,8 +2681,14 @@ impl<'a> Parser<'a> {
26812681 Ok ( ( pat, expr) )
26822682 }
26832683
2684- /// Parses `for <src_pat> in <src_expr> <src_loop_block>` (`for` token already eaten).
2684+ /// Parses `for await? <src_pat> in <src_expr> <src_loop_block>` (`for` token already eaten).
26852685 fn parse_expr_for ( & mut self , opt_label : Option < Label > , lo : Span ) -> PResult < ' a , P < Expr > > {
2686+ let is_await = self . eat_keyword ( kw:: Await ) ;
2687+
2688+ if is_await {
2689+ self . sess . gated_spans . gate ( sym:: async_iterator, self . prev_token . span ) ;
2690+ }
2691+
26862692 let ( pat, expr) = self . parse_for_head ( ) ?;
26872693 // Recover from missing expression in `for` loop
26882694 if matches ! ( expr. kind, ExprKind :: Block ( ..) )
@@ -2695,13 +2701,14 @@ impl<'a> Parser<'a> {
26952701 let block = self . mk_block ( thin_vec ! [ ] , BlockCheckMode :: Default , self . prev_token . span ) ;
26962702 return Ok ( self . mk_expr (
26972703 lo. to ( self . prev_token . span ) ,
2698- ExprKind :: ForLoop ( pat, err_expr, block, opt_label) ,
2704+ ExprKind :: ForLoop { pat, iter : err_expr, body : block, label : opt_label, is_await } ,
26992705 ) ) ;
27002706 }
27012707
27022708 let ( attrs, loop_block) = self . parse_inner_attrs_and_block ( ) ?;
27032709
2704- let kind = ExprKind :: ForLoop ( pat, expr, loop_block, opt_label) ;
2710+ let kind =
2711+ ExprKind :: ForLoop { pat, iter : expr, body : loop_block, label : opt_label, is_await } ;
27052712
27062713 self . recover_loop_else ( "for" , lo) ?;
27072714
@@ -3783,7 +3790,7 @@ impl MutVisitor for CondChecker<'_> {
37833790 | ExprKind :: Lit ( _)
37843791 | ExprKind :: If ( _, _, _)
37853792 | ExprKind :: While ( _, _, _)
3786- | ExprKind :: ForLoop ( _ , _ , _ , _ )
3793+ | ExprKind :: ForLoop { .. }
37873794 | ExprKind :: Loop ( _, _, _)
37883795 | ExprKind :: Match ( _, _)
37893796 | ExprKind :: Closure ( _)
0 commit comments