From eb4f54a58d0247dbd830165fd2ff214e07890964 Mon Sep 17 00:00:00 2001 From: Mazdak Farrokhzad Date: Mon, 17 Jun 2019 05:41:21 +0200 Subject: let_chains: Move feature gating to pre-expansion. --- src/libsyntax/feature_gate.rs | 36 +++++++++++------------------------- 1 file changed, 11 insertions(+), 25 deletions(-) (limited to 'src/libsyntax/feature_gate.rs') 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, -- cgit 1.4.1-3-g733a5