diff options
| author | Mazdak Farrokhzad <twingoow@gmail.com> | 2019-09-21 19:49:54 +0200 |
|---|---|---|
| committer | Mazdak Farrokhzad <twingoow@gmail.com> | 2019-10-24 00:32:03 +0200 |
| commit | 2aff6b36d7ed5c25700669a92b4a43200ee0fe6b (patch) | |
| tree | fbb55f5b4abf4983da47d266412712d1d70439c9 /src/libsyntax | |
| parent | 1f470ceac2202ecffe8a15acc1139edb9ad4a03b (diff) | |
pre-expansion gate box_patterns
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/feature_gate/check.rs | 16 | ||||
| -rw-r--r-- | src/libsyntax/parse/parser/pat.rs | 4 | ||||
| -rw-r--r-- | src/libsyntax/sess.rs | 2 |
3 files changed, 7 insertions, 15 deletions
diff --git a/src/libsyntax/feature_gate/check.rs b/src/libsyntax/feature_gate/check.rs index 9882db4e3f3..7c4668122a4 100644 --- a/src/libsyntax/feature_gate/check.rs +++ b/src/libsyntax/feature_gate/check.rs @@ -510,10 +510,6 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> { visit::walk_expr(self, e) } - fn visit_arm(&mut self, arm: &'a ast::Arm) { - visit::walk_arm(self, arm) - } - fn visit_pat(&mut self, pattern: &'a ast::Pat) { match &pattern.kind { PatKind::Slice(pats) => { @@ -533,11 +529,6 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> { } } } - PatKind::Box(..) => { - gate_feature_post!(&self, box_patterns, - pattern.span, - "box pattern syntax is experimental"); - } PatKind::Range(_, _, Spanned { node: RangeEnd::Excluded, .. }) => { gate_feature_post!(&self, exclusive_range_pattern, pattern.span, "exclusive range pattern syntax is experimental"); @@ -547,11 +538,7 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> { visit::walk_pat(self, pattern) } - fn visit_fn(&mut self, - fn_kind: FnKind<'a>, - fn_decl: &'a ast::FnDecl, - span: Span, - _node_id: NodeId) { + fn visit_fn(&mut self, fn_kind: FnKind<'a>, fn_decl: &'a ast::FnDecl, span: Span, _: NodeId) { if let Some(header) = fn_kind.header() { // Stability of const fn methods are covered in // `visit_trait_item` and `visit_impl_item` below; this is @@ -827,6 +814,7 @@ pub fn check_crate(krate: &ast::Crate, gate_all!(crate_visibility_modifier, "`crate` visibility modifier is experimental"); gate_all!(const_generics, "const generics are unstable"); gate_all!(decl_macro, "`macro` is experimental"); + gate_all!(box_patterns, "box pattern syntax is experimental"); visit::walk_crate(&mut visitor, krate); } diff --git a/src/libsyntax/parse/parser/pat.rs b/src/libsyntax/parse/parser/pat.rs index af795e51792..5374671d4b8 100644 --- a/src/libsyntax/parse/parser/pat.rs +++ b/src/libsyntax/parse/parser/pat.rs @@ -324,7 +324,9 @@ impl<'a> Parser<'a> { self.parse_pat_ident(BindingMode::ByRef(mutbl))? } else if self.eat_keyword(kw::Box) { // Parse `box pat` - PatKind::Box(self.parse_pat_with_range_pat(false, None)?) + let pat = self.parse_pat_with_range_pat(false, None)?; + self.sess.gated_spans.box_patterns.borrow_mut().push(lo.to(self.prev_span)); + PatKind::Box(pat) } else if self.can_be_ident_pat() { // Parse `ident @ pat` // This can give false positives and parse nullary enums, diff --git a/src/libsyntax/sess.rs b/src/libsyntax/sess.rs index 30aeff752ec..c8e60be1db9 100644 --- a/src/libsyntax/sess.rs +++ b/src/libsyntax/sess.rs @@ -40,6 +40,8 @@ crate struct GatedSpans { pub const_generics: Lock<Vec<Span>>, /// Spans collected for gating `decl_macro`, e.g. `macro m() {}`. pub decl_macro: Lock<Vec<Span>>, + /// Spans collected for gating `box_patterns`, e.g. `box 0`. + pub box_patterns: Lock<Vec<Span>>, } /// Info about a parsing session. |
