@@ -1799,7 +1799,7 @@ impl<'a> Parser<'a> {
1799
1799
&& matches ! (
1800
1800
expr. kind,
1801
1801
ExprKind :: While ( _, _, None )
1802
- | ExprKind :: ForLoop ( _ , _ , _ , None )
1802
+ | ExprKind :: ForLoop { label : None , .. }
1803
1803
| ExprKind :: Loop ( _, None , _)
1804
1804
| ExprKind :: Block ( _, None )
1805
1805
)
@@ -2672,8 +2672,14 @@ impl<'a> Parser<'a> {
2672
2672
Ok ( ( pat, expr) )
2673
2673
}
2674
2674
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).
2676
2676
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
+
2677
2683
let ( pat, expr) = self . parse_for_head ( ) ?;
2678
2684
// Recover from missing expression in `for` loop
2679
2685
if matches ! ( expr. kind, ExprKind :: Block ( ..) )
@@ -2686,13 +2692,14 @@ impl<'a> Parser<'a> {
2686
2692
let block = self . mk_block ( thin_vec ! [ ] , BlockCheckMode :: Default , self . prev_token . span ) ;
2687
2693
return Ok ( self . mk_expr (
2688
2694
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 } ,
2690
2696
) ) ;
2691
2697
}
2692
2698
2693
2699
let ( attrs, loop_block) = self . parse_inner_attrs_and_block ( ) ?;
2694
2700
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 } ;
2696
2703
2697
2704
self . recover_loop_else ( "for" , lo) ?;
2698
2705
@@ -3770,7 +3777,7 @@ impl MutVisitor for CondChecker<'_> {
3770
3777
| ExprKind :: Lit ( _)
3771
3778
| ExprKind :: If ( _, _, _)
3772
3779
| ExprKind :: While ( _, _, _)
3773
- | ExprKind :: ForLoop ( _ , _ , _ , _ )
3780
+ | ExprKind :: ForLoop { .. }
3774
3781
| ExprKind :: Loop ( _, _, _)
3775
3782
| ExprKind :: Match ( _, _)
3776
3783
| ExprKind :: Closure ( _)
0 commit comments