]>
Commit | Line | Data |
---|---|---|
1a4d82fc JJ |
1 | //! Routines the parser uses to classify AST nodes |
2 | ||
3 | // Predicates on exprs and stmts that the pretty-printer and parser use | |
223e47cc | 4 | |
9fa01778 | 5 | use crate::ast; |
223e47cc | 6 | |
1a4d82fc JJ |
7 | /// Does this expression require a semicolon to be treated |
8 | /// as a statement? The negation of this: 'can this expression | |
9 | /// be used as a statement without a semicolon' -- is used | |
10 | /// as an early-bail-out in the parser so that, for instance, | |
11 | /// if true {...} else {...} | |
12 | /// |x| 5 | |
13 | /// isn't parsed as (if true {...} else {...} | x) | 5 | |
14 | pub fn expr_requires_semi_to_be_stmt(e: &ast::Expr) -> bool { | |
e74abb32 | 15 | match e.kind { |
dfeec247 XL |
16 | ast::ExprKind::If(..) |
17 | | ast::ExprKind::Match(..) | |
18 | | ast::ExprKind::Block(..) | |
19 | | ast::ExprKind::While(..) | |
20 | | ast::ExprKind::Loop(..) | |
21 | | ast::ExprKind::ForLoop(..) | |
22 | | ast::ExprKind::TryBlock(..) => false, | |
7453a54e | 23 | _ => true, |
223e47cc LB |
24 | } |
25 | } |