(&mut self)
| 868 | } |
| 869 | |
| 870 | fn stmt_loop(&mut self) -> Expr { |
| 871 | let start = self.start(); |
| 872 | |
| 873 | let kind = match self.tok.kind { |
| 874 | TokenKind::For => { |
| 875 | // consume 'for' |
| 876 | self.next(); |
| 877 | |
| 878 | let binding = self.parse_binding(&AnnotationMode::Optional); |
| 879 | |
| 880 | self.expect(TokenKind::In_); |
| 881 | let expr = self.parse_expr_no_struct(); |
| 882 | |
| 883 | Loop::WithCondition { |
| 884 | binding, |
| 885 | expr: expr.into(), |
| 886 | } |
| 887 | } |
| 888 | |
| 889 | TokenKind::While => { |
| 890 | // consume 'while' |
| 891 | self.next(); |
| 892 | |
| 893 | let expr = self.parse_expr_no_struct(); |
| 894 | Loop::While { expr: expr.into() } |
| 895 | } |
| 896 | |
| 897 | TokenKind::Loop => { |
| 898 | // consume 'loop' |
| 899 | self.next(); |
| 900 | |
| 901 | Loop::NoCondition |
| 902 | } |
| 903 | |
| 904 | _ => unreachable!(), |
| 905 | }; |
| 906 | |
| 907 | let body = self.expr_block(); |
| 908 | |
| 909 | Expr::Loop { |
| 910 | kind, |
| 911 | body: body.into(), |
| 912 | span: self.make_span(start), |
| 913 | } |
| 914 | } |
| 915 | |
| 916 | fn stmt_loop_flow(&mut self) -> Expr { |
| 917 | let kind = match self.tok.kind { |
no test coverage detected