@@ -1800,7 +1800,7 @@ impl<'a> Parser<'a> {
1800
1800
&& matches ! (
1801
1801
expr. kind,
1802
1802
ExprKind :: While ( _, _, None )
1803
- | ExprKind :: ForLoop ( _ , _ , _ , None )
1803
+ | ExprKind :: ForLoop { label : None , .. }
1804
1804
| ExprKind :: Loop ( _, None , _)
1805
1805
| ExprKind :: Block ( _, None )
1806
1806
)
@@ -2681,8 +2681,14 @@ impl<'a> Parser<'a> {
2681
2681
Ok ( ( pat, expr) )
2682
2682
}
2683
2683
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).
2685
2685
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
+
2686
2692
let ( pat, expr) = self . parse_for_head ( ) ?;
2687
2693
// Recover from missing expression in `for` loop
2688
2694
if matches ! ( expr. kind, ExprKind :: Block ( ..) )
@@ -2695,13 +2701,14 @@ impl<'a> Parser<'a> {
2695
2701
let block = self . mk_block ( thin_vec ! [ ] , BlockCheckMode :: Default , self . prev_token . span ) ;
2696
2702
return Ok ( self . mk_expr (
2697
2703
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 } ,
2699
2705
) ) ;
2700
2706
}
2701
2707
2702
2708
let ( attrs, loop_block) = self . parse_inner_attrs_and_block ( ) ?;
2703
2709
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 } ;
2705
2712
2706
2713
self . recover_loop_else ( "for" , lo) ?;
2707
2714
@@ -3783,7 +3790,7 @@ impl MutVisitor for CondChecker<'_> {
3783
3790
| ExprKind :: Lit ( _)
3784
3791
| ExprKind :: If ( _, _, _)
3785
3792
| ExprKind :: While ( _, _, _)
3786
- | ExprKind :: ForLoop ( _ , _ , _ , _ )
3793
+ | ExprKind :: ForLoop { .. }
3787
3794
| ExprKind :: Loop ( _, _, _)
3788
3795
| ExprKind :: Match ( _, _)
3789
3796
| ExprKind :: Closure ( _)
0 commit comments