diff options
| author | Mazdak Farrokhzad <twingoow@gmail.com> | 2019-12-02 02:03:31 +0100 |
|---|---|---|
| committer | Mazdak Farrokhzad <twingoow@gmail.com> | 2019-12-12 18:01:33 +0100 |
| commit | b499a88dfc484f077ec7264bd7fae7d7c60d9fb8 (patch) | |
| tree | 1f3f9684c4dc414a6a6bce0541e55515274ab106 | |
| parent | 51ccdebe0b07f38e7e371a80424285539811c048 (diff) | |
| download | rust-b499a88dfc484f077ec7264bd7fae7d7c60d9fb8.tar.gz rust-b499a88dfc484f077ec7264bd7fae7d7c60d9fb8.zip | |
Unify assoc item visitors more.
| -rw-r--r-- | src/librustc/hir/lowering.rs | 6 | ||||
| -rw-r--r-- | src/librustc/lint/context.rs | 4 | ||||
| -rw-r--r-- | src/librustc_passes/ast_validation.rs | 4 | ||||
| -rw-r--r-- | src/librustc_passes/hir_stats.rs | 4 | ||||
| -rw-r--r-- | src/librustc_resolve/build_reduced_graph.rs | 4 | ||||
| -rw-r--r-- | src/librustc_resolve/def_collector.rs | 4 | ||||
| -rw-r--r-- | src/libsyntax/feature_gate/check.rs | 32 | ||||
| -rw-r--r-- | src/libsyntax/util/node_count.rs | 6 | ||||
| -rw-r--r-- | src/libsyntax/visit.rs | 13 | ||||
| -rw-r--r-- | src/test/ui/feature-gates/feature-gate-type_alias_impl_trait.stderr | 18 | ||||
| -rw-r--r-- | src/test/ui/parser/trait-item-with-defaultness-fail-semantic.rs | 2 | ||||
| -rw-r--r-- | src/test/ui/parser/trait-item-with-defaultness-fail-semantic.stderr | 12 |
12 files changed, 56 insertions, 53 deletions
diff --git a/src/librustc/hir/lowering.rs b/src/librustc/hir/lowering.rs index 1ee02dcf0c1..e2c99f456e9 100644 --- a/src/librustc/hir/lowering.rs +++ b/src/librustc/hir/lowering.rs @@ -484,11 +484,11 @@ impl<'a> LoweringContext<'a> { TraitItemKind::Method(_, None) => { // Ignore patterns in trait methods without bodies self.with_hir_id_owner(None, |this| { - visit::walk_assoc_item(this, item) + visit::walk_trait_item(this, item) }); } _ => self.with_hir_id_owner(Some(item.id), |this| { - visit::walk_assoc_item(this, item); + visit::walk_trait_item(this, item); }) } } @@ -496,7 +496,7 @@ impl<'a> LoweringContext<'a> { fn visit_impl_item(&mut self, item: &'tcx ImplItem) { self.lctx.allocate_hir_id_counter(item.id); self.with_hir_id_owner(Some(item.id), |this| { - visit::walk_assoc_item(this, item); + visit::walk_impl_item(this, item); }); } diff --git a/src/librustc/lint/context.rs b/src/librustc/lint/context.rs index e0ec9e62645..7f72154e42c 100644 --- a/src/librustc/lint/context.rs +++ b/src/librustc/lint/context.rs @@ -1252,7 +1252,7 @@ impl<'a, T: EarlyLintPass> ast_visit::Visitor<'a> for EarlyContextAndPass<'a, T> fn visit_trait_item(&mut self, trait_item: &'a ast::TraitItem) { self.with_lint_attrs(trait_item.id, &trait_item.attrs, |cx| { run_early_pass!(cx, check_trait_item, trait_item); - ast_visit::walk_assoc_item(cx, trait_item); + ast_visit::walk_trait_item(cx, trait_item); run_early_pass!(cx, check_trait_item_post, trait_item); }); } @@ -1260,7 +1260,7 @@ impl<'a, T: EarlyLintPass> ast_visit::Visitor<'a> for EarlyContextAndPass<'a, T> fn visit_impl_item(&mut self, impl_item: &'a ast::ImplItem) { self.with_lint_attrs(impl_item.id, &impl_item.attrs, |cx| { run_early_pass!(cx, check_impl_item, impl_item); - ast_visit::walk_assoc_item(cx, impl_item); + ast_visit::walk_impl_item(cx, impl_item); run_early_pass!(cx, check_impl_item_post, impl_item); }); } diff --git a/src/librustc_passes/ast_validation.rs b/src/librustc_passes/ast_validation.rs index 34534d6cca5..ad6c99494a6 100644 --- a/src/librustc_passes/ast_validation.rs +++ b/src/librustc_passes/ast_validation.rs @@ -787,13 +787,13 @@ impl<'a> Visitor<'a> for AstValidator<'a> { } _ => {} } - visit::walk_assoc_item(self, ii); + visit::walk_impl_item(self, ii); } fn visit_trait_item(&mut self, ti: &'a AssocItem) { self.invalid_visibility(&ti.vis, None); self.check_defaultness(ti.span, ti.defaultness); - visit::walk_assoc_item(self, ti); + visit::walk_trait_item(self, ti); } } diff --git a/src/librustc_passes/hir_stats.rs b/src/librustc_passes/hir_stats.rs index 071ed0db870..a5924efefc2 100644 --- a/src/librustc_passes/hir_stats.rs +++ b/src/librustc_passes/hir_stats.rs @@ -316,12 +316,12 @@ impl<'v> ast_visit::Visitor<'v> for StatCollector<'v> { fn visit_trait_item(&mut self, ti: &'v ast::TraitItem) { self.record("TraitItem", Id::None, ti); - ast_visit::walk_assoc_item(self, ti) + ast_visit::walk_trait_item(self, ti) } fn visit_impl_item(&mut self, ii: &'v ast::ImplItem) { self.record("ImplItem", Id::None, ii); - ast_visit::walk_assoc_item(self, ii) + ast_visit::walk_impl_item(self, ii) } fn visit_param_bound(&mut self, bounds: &'v ast::GenericBound) { diff --git a/src/librustc_resolve/build_reduced_graph.rs b/src/librustc_resolve/build_reduced_graph.rs index abed4b326a5..d2d5a33ec7a 100644 --- a/src/librustc_resolve/build_reduced_graph.rs +++ b/src/librustc_resolve/build_reduced_graph.rs @@ -1190,7 +1190,7 @@ impl<'a, 'b> Visitor<'b> for BuildReducedGraphVisitor<'a, 'b> { let expansion = self.parent_scope.expansion; self.r.define(parent, item.ident, ns, (res, vis, item.span, expansion)); - visit::walk_assoc_item(self, item); + visit::walk_trait_item(self, item); } fn visit_impl_item(&mut self, item: &'b ast::ImplItem) { @@ -1198,7 +1198,7 @@ impl<'a, 'b> Visitor<'b> for BuildReducedGraphVisitor<'a, 'b> { self.visit_invoc(item.id); } else { self.resolve_visibility(&item.vis); - visit::walk_assoc_item(self, item); + visit::walk_impl_item(self, item); } } diff --git a/src/librustc_resolve/def_collector.rs b/src/librustc_resolve/def_collector.rs index 248027a91ab..471e2634b8a 100644 --- a/src/librustc_resolve/def_collector.rs +++ b/src/librustc_resolve/def_collector.rs @@ -223,7 +223,7 @@ impl<'a> visit::Visitor<'a> for DefCollector<'a> { }; let def = self.create_def(ti.id, def_data, ti.span); - self.with_parent(def, |this| visit::walk_assoc_item(this, ti)); + self.with_parent(def, |this| visit::walk_trait_item(this, ti)); } fn visit_impl_item(&mut self, ii: &'a ImplItem) { @@ -249,7 +249,7 @@ impl<'a> visit::Visitor<'a> for DefCollector<'a> { }; let def = self.create_def(ii.id, def_data, ii.span); - self.with_parent(def, |this| visit::walk_assoc_item(this, ii)); + self.with_parent(def, |this| visit::walk_impl_item(this, ii)); } fn visit_pat(&mut self, pat: &'a Pat) { diff --git a/src/libsyntax/feature_gate/check.rs b/src/libsyntax/feature_gate/check.rs index 226719c7460..c27fcb6a68e 100644 --- a/src/libsyntax/feature_gate/check.rs +++ b/src/libsyntax/feature_gate/check.rs @@ -577,42 +577,38 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> { if block.is_none() { self.check_extern(sig.header.ext); } - if sig.decl.c_variadic() { - gate_feature_post!(&self, c_variadic, ti.span, - "C-variadic functions are unstable"); - } if sig.header.constness.node == ast::Constness::Const { gate_feature_post!(&self, const_fn, ti.span, "const fn is unstable"); } } ast::TraitItemKind::TyAlias(_, ref default) => { - if let Some(ty) = default { - self.check_impl_trait(ty); - gate_feature_post!(&self, associated_type_defaults, ti.span, - "associated type defaults are unstable"); + if let Some(_) = default { + gate_feature_post!( + &self, associated_type_defaults, ti.span, + "associated type defaults are unstable" + ); } - self.check_gat(&ti.generics, ti.span); } _ => {} } - visit::walk_assoc_item(self, ti) + visit::walk_trait_item(self, ti) } - fn visit_impl_item(&mut self, ii: &'a ast::ImplItem) { + fn visit_assoc_item(&mut self, ii: &'a ast::AssocItem) { if ii.defaultness == ast::Defaultness::Default { - gate_feature_post!(&self, specialization, - ii.span, - "specialization is unstable"); + gate_feature_post!(&self, specialization, ii.span, "specialization is unstable"); } match ii.kind { - ast::ImplItemKind::Method(ref sig, _) => { + ast::AssocItemKind::Method(ref sig, _) => { if sig.decl.c_variadic() { - gate_feature_post!(&self, c_variadic, ii.span, - "C-variadic functions are unstable"); + gate_feature_post!( + &self, c_variadic, ii.span, + "C-variadic functions are unstable" + ); } } - ast::ImplItemKind::TyAlias(_, ref ty) => { + ast::AssocItemKind::TyAlias(_, ref ty) => { if let Some(ty) = ty { self.check_impl_trait(ty); } diff --git a/src/libsyntax/util/node_count.rs b/src/libsyntax/util/node_count.rs index 14ca7a7eff3..3db9955d304 100644 --- a/src/libsyntax/util/node_count.rs +++ b/src/libsyntax/util/node_count.rs @@ -73,14 +73,10 @@ impl<'ast> Visitor<'ast> for NodeCounter { self.count += 1; walk_fn(self, fk, fd, s) } - fn visit_trait_item(&mut self, ti: &TraitItem) { + fn visit_assoc_item(&mut self, ti: &AssocItem) { self.count += 1; walk_assoc_item(self, ti) } - fn visit_impl_item(&mut self, ii: &ImplItem) { - self.count += 1; - walk_assoc_item(self, ii) - } fn visit_trait_ref(&mut self, t: &TraitRef) { self.count += 1; walk_trait_ref(self, t) diff --git a/src/libsyntax/visit.rs b/src/libsyntax/visit.rs index 8fe8e136c10..e2c0ee61467 100644 --- a/src/libsyntax/visit.rs +++ b/src/libsyntax/visit.rs @@ -83,8 +83,9 @@ pub trait Visitor<'ast>: Sized { fn visit_fn(&mut self, fk: FnKind<'ast>, fd: &'ast FnDecl, s: Span, _: NodeId) { walk_fn(self, fk, fd, s) } - fn visit_trait_item(&mut self, i: &'ast AssocItem) { walk_assoc_item(self, i) } - fn visit_impl_item(&mut self, i: &'ast AssocItem) { walk_assoc_item(self, i) } + fn visit_trait_item(&mut self, i: &'ast AssocItem) { walk_trait_item(self, i) } + fn visit_impl_item(&mut self, i: &'ast AssocItem) { walk_impl_item(self, i) } + fn visit_assoc_item(&mut self, i: &'ast AssocItem) { walk_assoc_item(self, i) } fn visit_trait_ref(&mut self, t: &'ast TraitRef) { walk_trait_ref(self, t) } fn visit_param_bound(&mut self, bounds: &'ast GenericBound) { walk_param_bound(self, bounds) @@ -581,6 +582,14 @@ pub fn walk_fn<'a, V>(visitor: &mut V, kind: FnKind<'a>, declaration: &'a FnDecl } } +pub fn walk_impl_item<'a, V: Visitor<'a>>(visitor: &mut V, item: &'a AssocItem) { + visitor.visit_assoc_item(item); +} + +pub fn walk_trait_item<'a, V: Visitor<'a>>(visitor: &mut V, item: &'a AssocItem) { + visitor.visit_assoc_item(item); +} + pub fn walk_assoc_item<'a, V: Visitor<'a>>(visitor: &mut V, item: &'a AssocItem) { visitor.visit_vis(&item.vis); visitor.visit_ident(item.ident); diff --git a/src/test/ui/feature-gates/feature-gate-type_alias_impl_trait.stderr b/src/test/ui/feature-gates/feature-gate-type_alias_impl_trait.stderr index d9ebcdecb9b..1f61473c9d2 100644 --- a/src/test/ui/feature-gates/feature-gate-type_alias_impl_trait.stderr +++ b/src/test/ui/feature-gates/feature-gate-type_alias_impl_trait.stderr @@ -16,15 +16,6 @@ LL | type Baa = impl Debug; = note: for more information, see https://github.com/rust-lang/rust/issues/63063 = help: add `#![feature(type_alias_impl_trait)]` to the crate attributes to enable -error[E0658]: `impl Trait` in type aliases is unstable - --> $DIR/feature-gate-type_alias_impl_trait.rs:18:18 - | -LL | type Assoc = impl Debug; - | ^^^^^^^^^^ - | - = note: for more information, see https://github.com/rust-lang/rust/issues/63063 - = help: add `#![feature(type_alias_impl_trait)]` to the crate attributes to enable - error[E0658]: associated type defaults are unstable --> $DIR/feature-gate-type_alias_impl_trait.rs:18:5 | @@ -35,6 +26,15 @@ LL | type Assoc = impl Debug; = help: add `#![feature(associated_type_defaults)]` to the crate attributes to enable error[E0658]: `impl Trait` in type aliases is unstable + --> $DIR/feature-gate-type_alias_impl_trait.rs:18:18 + | +LL | type Assoc = impl Debug; + | ^^^^^^^^^^ + | + = note: for more information, see https://github.com/rust-lang/rust/issues/63063 + = help: add `#![feature(type_alias_impl_trait)]` to the crate attributes to enable + +error[E0658]: `impl Trait` in type aliases is unstable --> $DIR/feature-gate-type_alias_impl_trait.rs:24:24 | LL | type NestedFree = (Vec<impl Debug>, impl Debug, impl Iterator<Item = impl Debug>); diff --git a/src/test/ui/parser/trait-item-with-defaultness-fail-semantic.rs b/src/test/ui/parser/trait-item-with-defaultness-fail-semantic.rs index b67e30637aa..09f967f161e 100644 --- a/src/test/ui/parser/trait-item-with-defaultness-fail-semantic.rs +++ b/src/test/ui/parser/trait-item-with-defaultness-fail-semantic.rs @@ -1,3 +1,5 @@ +#![feature(specialization)] + fn main() {} trait X { diff --git a/src/test/ui/parser/trait-item-with-defaultness-fail-semantic.stderr b/src/test/ui/parser/trait-item-with-defaultness-fail-semantic.stderr index 48b502a1506..54111df3423 100644 --- a/src/test/ui/parser/trait-item-with-defaultness-fail-semantic.stderr +++ b/src/test/ui/parser/trait-item-with-defaultness-fail-semantic.stderr @@ -1,35 +1,35 @@ error: `default` is only allowed on items in `impl` definitions - --> $DIR/trait-item-with-defaultness-fail-semantic.rs:4:5 + --> $DIR/trait-item-with-defaultness-fail-semantic.rs:6:5 | LL | default const A: u8; | ^^^^^^^^^^^^^^^^^^^^ error: `default` is only allowed on items in `impl` definitions - --> $DIR/trait-item-with-defaultness-fail-semantic.rs:5:5 + --> $DIR/trait-item-with-defaultness-fail-semantic.rs:7:5 | LL | default const B: u8 = 0; | ^^^^^^^^^^^^^^^^^^^^^^^^ error: `default` is only allowed on items in `impl` definitions - --> $DIR/trait-item-with-defaultness-fail-semantic.rs:6:5 + --> $DIR/trait-item-with-defaultness-fail-semantic.rs:8:5 | LL | default type D; | ^^^^^^^^^^^^^^^ error: `default` is only allowed on items in `impl` definitions - --> $DIR/trait-item-with-defaultness-fail-semantic.rs:7:5 + --> $DIR/trait-item-with-defaultness-fail-semantic.rs:9:5 | LL | default type C: Ord; | ^^^^^^^^^^^^^^^^^^^^ error: `default` is only allowed on items in `impl` definitions - --> $DIR/trait-item-with-defaultness-fail-semantic.rs:8:5 + --> $DIR/trait-item-with-defaultness-fail-semantic.rs:10:5 | LL | default fn f1(); | ^^^^^^^^^^^^^^^^ error: `default` is only allowed on items in `impl` definitions - --> $DIR/trait-item-with-defaultness-fail-semantic.rs:9:5 + --> $DIR/trait-item-with-defaultness-fail-semantic.rs:11:5 | LL | default fn f2() {} | ^^^^^^^^^^^^^^^^^^ |
