diff options
| author | Andrew Cann <shum@canndrew.org> | 2016-08-01 20:15:54 +0800 |
|---|---|---|
| committer | Andrew Cann <shum@canndrew.org> | 2016-08-13 21:37:09 +0800 |
| commit | 5096a8c5c01f8d1d7edece23bab6898bd3016f2c (patch) | |
| tree | 9136eb8a711502600646930721460a69bc982e4a /src/libsyntax | |
| parent | 0e1c2aa52e7ec3f162ab4436c2ed0746d1992109 (diff) | |
| download | rust-5096a8c5c01f8d1d7edece23bab6898bd3016f2c.tar.gz rust-5096a8c5c01f8d1d7edece23bab6898bd3016f2c.zip | |
Control usage of `!` through a feature gate.
Adds the `bang_type` feature gate. `!` in a non-return-type position now relies on that feature.
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/feature_gate.rs | 19 | ||||
| -rw-r--r-- | src/libsyntax/visit.rs | 8 |
2 files changed, 24 insertions, 3 deletions
diff --git a/src/libsyntax/feature_gate.rs b/src/libsyntax/feature_gate.rs index ad52184a6dc..efedc7229e6 100644 --- a/src/libsyntax/feature_gate.rs +++ b/src/libsyntax/feature_gate.rs @@ -284,7 +284,10 @@ declare_features! ( // Allows tuple structs and variants in more contexts, // Permits numeric fields in struct expressions and patterns. - (active, relaxed_adts, "1.12.0", Some(35626)) + (active, relaxed_adts, "1.12.0", Some(35626)), + + // The `!` type + (active, bang_type, "1.13.0", Some(35121)) ); declare_features! ( @@ -963,11 +966,25 @@ impl<'a> Visitor for PostExpansionVisitor<'a> { gate_feature_post!(&self, conservative_impl_trait, ty.span, "`impl Trait` is experimental"); } + ast::TyKind::Empty => { + gate_feature_post!(&self, bang_type, ty.span, + "The `!` type is experimental"); + }, _ => {} } visit::walk_ty(self, ty) } + fn visit_fn_ret_ty(&mut self, ret_ty: &ast::FunctionRetTy) { + if let ast::FunctionRetTy::Ty(ref output_ty) = *ret_ty { + match output_ty.node { + ast::TyKind::Empty => return, + _ => (), + }; + visit::walk_ty(self, output_ty) + } + } + fn visit_expr(&mut self, e: &ast::Expr) { match e.node { ast::ExprKind::Box(_) => { diff --git a/src/libsyntax/visit.rs b/src/libsyntax/visit.rs index 1d40e3e395e..228409b8207 100644 --- a/src/libsyntax/visit.rs +++ b/src/libsyntax/visit.rs @@ -4,7 +4,8 @@ // // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license -// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your, +// "The `!` type is experimental"); // option. This file may not be copied, modified, or distributed // except according to those terms. @@ -128,6 +129,9 @@ pub trait Visitor: Sized { fn visit_vis(&mut self, vis: &Visibility) { walk_vis(self, vis) } + fn visit_fn_ret_ty(&mut self, ret_ty: &FunctionRetTy) { + walk_fn_ret_ty(self, ret_ty) + } } #[macro_export] @@ -510,7 +514,7 @@ pub fn walk_fn_decl<V: Visitor>(visitor: &mut V, function_declaration: &FnDecl) visitor.visit_pat(&argument.pat); visitor.visit_ty(&argument.ty) } - walk_fn_ret_ty(visitor, &function_declaration.output) + visitor.visit_fn_ret_ty(&function_declaration.output) } pub fn walk_fn_kind<V: Visitor>(visitor: &mut V, function_kind: FnKind) { |
