diff options
| author | Mazdak Farrokhzad <twingoow@gmail.com> | 2019-09-21 18:58:17 +0200 |
|---|---|---|
| committer | Mazdak Farrokhzad <twingoow@gmail.com> | 2019-10-24 00:32:03 +0200 |
| commit | 49cbfa1a6f6469ddbc0e88161e52104cc87aea9b (patch) | |
| tree | af0abae0cbf18a6f7a19ae19e912bd5b7bee0805 /src/libsyntax | |
| parent | 04c661ba021730bc13d33c6d55cb9aad05026f36 (diff) | |
| download | rust-49cbfa1a6f6469ddbc0e88161e52104cc87aea9b.tar.gz rust-49cbfa1a6f6469ddbc0e88161e52104cc87aea9b.zip | |
pre-expansion gate const_generics
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/feature_gate/check.rs | 13 | ||||
| -rw-r--r-- | src/libsyntax/parse/parser/generics.rs | 4 | ||||
| -rw-r--r-- | src/libsyntax/sess.rs | 2 |
3 files changed, 8 insertions, 11 deletions
diff --git a/src/libsyntax/feature_gate/check.rs b/src/libsyntax/feature_gate/check.rs index 58610d8db7e..282b5ae2193 100644 --- a/src/libsyntax/feature_gate/check.rs +++ b/src/libsyntax/feature_gate/check.rs @@ -3,7 +3,7 @@ use super::accepted::ACCEPTED_FEATURES; use super::removed::{REMOVED_FEATURES, STABLE_REMOVED_FEATURES}; use super::builtin_attrs::{AttributeGate, BUILTIN_ATTRIBUTE_MAP}; -use crate::ast::{self, NodeId, GenericParam, GenericParamKind, PatKind, RangeEnd, VariantData}; +use crate::ast::{self, NodeId, PatKind, RangeEnd, VariantData}; use crate::attr::{self, check_builtin_attribute}; use crate::source_map::Spanned; use crate::edition::{ALL_EDITIONS, Edition}; @@ -571,16 +571,6 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> { visit::walk_fn(self, fn_kind, fn_decl, span) } - fn visit_generic_param(&mut self, param: &'a GenericParam) { - match param.kind { - GenericParamKind::Const { .. } => - gate_feature_post!(&self, const_generics, param.ident.span, - "const generics are unstable"), - _ => {} - } - visit::walk_generic_param(self, param) - } - fn visit_trait_item(&mut self, ti: &'a ast::TraitItem) { match ti.kind { ast::TraitItemKind::Method(ref sig, ref block) => { @@ -840,6 +830,7 @@ pub fn check_crate(krate: &ast::Crate, gate_all!(trait_alias, "trait aliases are experimental"); gate_all!(associated_type_bounds, "associated type bounds are unstable"); gate_all!(crate_visibility_modifier, "`crate` visibility modifier is experimental"); + gate_all!(const_generics, "const generics are unstable"); visit::walk_crate(&mut visitor, krate); } diff --git a/src/libsyntax/parse/parser/generics.rs b/src/libsyntax/parse/parser/generics.rs index bfcb0042a75..51caae69c86 100644 --- a/src/libsyntax/parse/parser/generics.rs +++ b/src/libsyntax/parse/parser/generics.rs @@ -55,11 +55,15 @@ impl<'a> Parser<'a> { } fn parse_const_param(&mut self, preceding_attrs: Vec<Attribute>) -> PResult<'a, GenericParam> { + let lo = self.token.span; + self.expect_keyword(kw::Const)?; let ident = self.parse_ident()?; self.expect(&token::Colon)?; let ty = self.parse_ty()?; + self.sess.gated_spans.const_generics.borrow_mut().push(lo.to(self.prev_span)); + Ok(GenericParam { ident, id: ast::DUMMY_NODE_ID, diff --git a/src/libsyntax/sess.rs b/src/libsyntax/sess.rs index 58a2f89aca9..3d2051b4c78 100644 --- a/src/libsyntax/sess.rs +++ b/src/libsyntax/sess.rs @@ -36,6 +36,8 @@ crate struct GatedSpans { pub associated_type_bounds: Lock<Vec<Span>>, /// Spans collected for gating `crate_visibility_modifier`, e.g. `crate fn`. pub crate_visibility_modifier: Lock<Vec<Span>>, + /// Spans collected for gating `const_generics`, e.g. `const N: usize`. + pub const_generics: Lock<Vec<Span>>, } /// Info about a parsing session. |
