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) => {
}
}
}
- 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");
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
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);
}
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,
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.
= note: for more information, see https://github.com/rust-lang/rust/issues/29641
= help: add `#![feature(box_patterns)]` to the crate attributes to enable
-error: aborting due to previous error
+error[E0658]: box pattern syntax is experimental
+ --> $DIR/feature-gate-box_patterns.rs:7:13
+ |
+LL | accept_pat!(box 0);
+ | ^^^^^
+ |
+ = note: for more information, see https://github.com/rust-lang/rust/issues/29641
+ = help: add `#![feature(box_patterns)]` to the crate attributes to enable
+
+error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0658`.