From 8a609521007c0c0c37d8d2396085631c08ad5232 Mon Sep 17 00:00:00 2001 From: Kevin Ballard Date: Tue, 26 Aug 2014 20:00:41 -0700 Subject: [PATCH] Move `if let` behind a feature gate --- src/doc/reference.md | 2 ++ src/doc/rust.md | 2 +- src/libsyntax/feature_gate.rs | 6 ++++++ src/test/compile-fail/if-let.rs | 2 +- src/test/compile-fail/lint-unnecessary-parens.rs | 1 + src/test/run-pass/if-let.rs | 2 ++ 6 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/doc/reference.md b/src/doc/reference.md index 21da810a30098..04ebcf9a3fb5e 100644 --- a/src/doc/reference.md +++ b/src/doc/reference.md @@ -2441,6 +2441,8 @@ The currently implemented features of the reference compiler are: * `default_type_params` - Allows use of default type parameters. The future of this feature is uncertain. +* `if_let` - Allows use of the `if let` desugaring syntax. + * `intrinsics` - Allows use of the "rust-intrinsics" ABI. Compiler intrinsics are inherently unstable and no promise about them is made. diff --git a/src/doc/rust.md b/src/doc/rust.md index 7f02260cd2cd4..c5dd95902fc6d 100644 --- a/src/doc/rust.md +++ b/src/doc/rust.md @@ -1,3 +1,3 @@ % The Rust Reference Manual -The manual has moved, and is now called [the reference](reference.html). +The manual has moved, and is now called [the reference](reference.html). \ No newline at end of file diff --git a/src/libsyntax/feature_gate.rs b/src/libsyntax/feature_gate.rs index 1c6ee8acc94a5..fac4244228af4 100644 --- a/src/libsyntax/feature_gate.rs +++ b/src/libsyntax/feature_gate.rs @@ -71,6 +71,8 @@ static KNOWN_FEATURES: &'static [(&'static str, Status)] = &[ ("associated_types", Active), ("visible_private_types", Active), + ("if_let", Active), + // if you change this list without updating src/doc/rust.md, cmr will be sad // A temporary feature gate used to enable parser extensions needed @@ -356,6 +358,10 @@ impl<'a, 'v> Visitor<'v> for Context<'a> { e.span, "tuple indexing is experimental"); } + ast::ExprIfLet(..) => { + self.gate_feature("if_let", e.span, + "`if let` desugaring is experimental"); + } _ => {} } visit::walk_expr(self, e); diff --git a/src/test/compile-fail/if-let.rs b/src/test/compile-fail/if-let.rs index 88b6854bb1d2c..b82fb7a94c95f 100644 --- a/src/test/compile-fail/if-let.rs +++ b/src/test/compile-fail/if-let.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![feature(macro_rules)] +#![feature(macro_rules,if_let)] fn macros() { macro_rules! foo{ diff --git a/src/test/compile-fail/lint-unnecessary-parens.rs b/src/test/compile-fail/lint-unnecessary-parens.rs index 82fb42571af74..3c962ebf21670 100644 --- a/src/test/compile-fail/lint-unnecessary-parens.rs +++ b/src/test/compile-fail/lint-unnecessary-parens.rs @@ -9,6 +9,7 @@ // except according to those terms. #![deny(unnecessary_parens)] +#![feature(if_let)] #[deriving(Eq, PartialEq)] struct X { y: bool } diff --git a/src/test/run-pass/if-let.rs b/src/test/run-pass/if-let.rs index a6886bf9850e2..4bf3a85677c72 100644 --- a/src/test/run-pass/if-let.rs +++ b/src/test/run-pass/if-let.rs @@ -8,6 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +#![feature(if_let)] + pub fn main() { let x = Some(3i); if let Some(y) = x {