diff options
| author | Mazdak Farrokhzad <twingoow@gmail.com> | 2019-10-11 13:17:20 +0200 |
|---|---|---|
| committer | Mazdak Farrokhzad <twingoow@gmail.com> | 2019-11-07 13:59:13 +0100 |
| commit | 255b12a8d3ef3639b4b389fc56d93bd80f03d087 (patch) | |
| tree | 3bcc219b41a690d86423a52261a8f5b5ed0875c0 /src/libsyntax/util/classify.rs | |
| parent | 3667e6248ec18740ce57db7997333a30c991929b (diff) | |
| download | rust-255b12a8d3ef3639b4b389fc56d93bd80f03d087.tar.gz rust-255b12a8d3ef3639b4b389fc56d93bd80f03d087.zip | |
move parse::classify -> util::classify
Diffstat (limited to 'src/libsyntax/util/classify.rs')
| -rw-r--r-- | src/libsyntax/util/classify.rs | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/libsyntax/util/classify.rs b/src/libsyntax/util/classify.rs new file mode 100644 index 00000000000..44560688750 --- /dev/null +++ b/src/libsyntax/util/classify.rs @@ -0,0 +1,25 @@ +//! Routines the parser uses to classify AST nodes + +// Predicates on exprs and stmts that the pretty-printer and parser use + +use crate::ast; + +/// Does this expression require a semicolon to be treated +/// as a statement? The negation of this: 'can this expression +/// be used as a statement without a semicolon' -- is used +/// as an early-bail-out in the parser so that, for instance, +/// if true {...} else {...} +/// |x| 5 +/// isn't parsed as (if true {...} else {...} | x) | 5 +pub fn expr_requires_semi_to_be_stmt(e: &ast::Expr) -> bool { + match e.kind { + ast::ExprKind::If(..) | + ast::ExprKind::Match(..) | + ast::ExprKind::Block(..) | + ast::ExprKind::While(..) | + ast::ExprKind::Loop(..) | + ast::ExprKind::ForLoop(..) | + ast::ExprKind::TryBlock(..) => false, + _ => true, + } +} |
