diff options
| author | Mazdak Farrokhzad <twingoow@gmail.com> | 2019-06-17 05:41:21 +0200 |
|---|---|---|
| committer | Mazdak Farrokhzad <twingoow@gmail.com> | 2019-06-23 01:29:29 +0200 |
| commit | eb4f54a58d0247dbd830165fd2ff214e07890964 (patch) | |
| tree | 59489d9d482d57bf95a33850bc6a605aa824c452 /src/libsyntax/feature_gate.rs | |
| parent | d5518802677d4701185b5cd3b9df4b263fc864b2 (diff) | |
| download | rust-eb4f54a58d0247dbd830165fd2ff214e07890964.tar.gz rust-eb4f54a58d0247dbd830165fd2ff214e07890964.zip | |
let_chains: Move feature gating to pre-expansion.
Diffstat (limited to 'src/libsyntax/feature_gate.rs')
| -rw-r--r-- | src/libsyntax/feature_gate.rs | 36 |
1 files changed, 11 insertions, 25 deletions
diff --git a/src/libsyntax/feature_gate.rs b/src/libsyntax/feature_gate.rs index 1f64f1a6888..8ec07de5fab 100644 --- a/src/libsyntax/feature_gate.rs +++ b/src/libsyntax/feature_gate.rs @@ -1940,27 +1940,6 @@ impl<'a> PostExpansionVisitor<'a> { Err(mut err) => err.emit(), } } - - /// Recurse into all places where a `let` expression would be feature gated - /// and emit gate post errors for those. - fn find_and_gate_lets(&mut self, e: &'a ast::Expr) { - match &e.node { - ast::ExprKind::Paren(e) => { - self.find_and_gate_lets(e); - } - ast::ExprKind::Binary(op, lhs, rhs) if op.node == ast::BinOpKind::And => { - self.find_and_gate_lets(lhs); - self.find_and_gate_lets(rhs); - } - ast::ExprKind::Let(..) => { - gate_feature_post!( - &self, let_chains, e.span, - "`let` expressions in this position are experimental" - ); - } - _ => {} - } - } } impl<'a> Visitor<'a> for PostExpansionVisitor<'a> { @@ -2158,10 +2137,6 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> { fn visit_expr(&mut self, e: &'a ast::Expr) { match e.node { - ast::ExprKind::If(ref e, ..) | ast::ExprKind::While(ref e, ..) => match e.node { - ast::ExprKind::Let(..) => {} // Stable!, - _ => self.find_and_gate_lets(e), - } ast::ExprKind::Box(_) => { gate_feature_post!(&self, box_syntax, e.span, EXPLAIN_BOX_SYNTAX); } @@ -2546,6 +2521,17 @@ pub fn check_crate(krate: &ast::Crate, "attributes on function parameters are unstable" )); + sess + .let_chains_spans + .borrow() + .iter() + .for_each(|span| gate_feature!( + &ctx, + let_chains, + *span, + "`let` expressions in this position are experimental" + )); + let visitor = &mut PostExpansionVisitor { context: &ctx, builtin_attributes: &*BUILTIN_ATTRIBUTE_MAP, |
