Skip to content

Commit 3e0c777

Browse files
committed
Add AssocCtxt
1 parent b63d35b commit 3e0c777

File tree

2 files changed

+20
-12
lines changed

2 files changed

+20
-12
lines changed

compiler/rustc_ast/src/mut_visit.rs

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ impl<A: Array> ExpectOne<A> for SmallVec<A> {
3737
}
3838

3939
pub trait WalkItemKind {
40-
fn walk(&mut self, span: Span, id: NodeId, ident: &mut Ident, visibility: &mut Visibility, visitor: &mut impl MutVisitor);
40+
fn walk(&mut self, span: Span, id: NodeId, ident: &mut Ident, visibility: &mut Visibility, ctxt: AssocCtxt, visitor: &mut impl MutVisitor);
4141
}
4242

4343
pub trait MutVisitor: Sized {
@@ -114,9 +114,9 @@ pub trait MutVisitor: Sized {
114114
fn flat_map_assoc_item(
115115
&mut self,
116116
i: P<AssocItem>,
117-
_ctxt: AssocCtxt,
117+
ctxt: AssocCtxt,
118118
) -> SmallVec<[P<AssocItem>; 1]> {
119-
walk_flat_map_item(self, i)
119+
walk_flat_map_assoc_item(self, i, ctxt)
120120
}
121121

122122
fn visit_fn_decl(&mut self, d: &mut P<FnDecl>) {
@@ -1086,13 +1086,14 @@ pub fn walk_item_kind(
10861086
id: NodeId,
10871087
ident: &mut Ident,
10881088
visibility: &mut Visibility,
1089+
ctxt: AssocCtxt,
10891090
vis: &mut impl MutVisitor,
10901091
) {
1091-
kind.walk(span, id, ident, visibility, vis)
1092+
kind.walk(span, id, ident, visibility, ctxt, vis)
10921093
}
10931094

10941095
impl WalkItemKind for ItemKind {
1095-
fn walk(&mut self, span: Span, id: NodeId, ident: &mut Ident, visibility: &mut Visibility, vis: &mut impl MutVisitor) {
1096+
fn walk(&mut self, span: Span, id: NodeId, ident: &mut Ident, visibility: &mut Visibility, _ctxt: AssocCtxt, vis: &mut impl MutVisitor) {
10961097
match self {
10971098
ItemKind::ExternCrate(_orig_name) => {}
10981099
ItemKind::Use(use_tree) => vis.visit_use_tree(use_tree),
@@ -1204,15 +1205,15 @@ impl WalkItemKind for ItemKind {
12041205
}
12051206

12061207
impl WalkItemKind for AssocItemKind {
1207-
fn walk(&mut self, span: Span, id: NodeId, ident: &mut Ident, visibility: &mut Visibility, visitor: &mut impl MutVisitor) {
1208+
fn walk(&mut self, span: Span, id: NodeId, ident: &mut Ident, visibility: &mut Visibility, ctxt: AssocCtxt, visitor: &mut impl MutVisitor) {
12081209
match self {
12091210
AssocItemKind::Const(item) => {
12101211
visit_const_item(item, visitor);
12111212
}
12121213
AssocItemKind::Fn(box Fn { defaultness, generics, sig, body }) => {
12131214
visit_defaultness(visitor, defaultness);
12141215
// TODO: use AssocCtxt
1215-
visitor.visit_fn(FnKind::Fn(FnCtxt::Free, ident, sig, visibility, generics, body), span, id);
1216+
visitor.visit_fn(FnKind::Fn(FnCtxt::Assoc(ctxt), ident, sig, visibility, generics, body), span, id);
12161217
}
12171218
AssocItemKind::Type(box TyAlias {
12181219
defaultness,
@@ -1292,24 +1293,31 @@ pub fn walk_crate<T: MutVisitor>(vis: &mut T, krate: &mut Crate) {
12921293
vis.visit_span(inject_use_span);
12931294
}
12941295

1295-
/// Mutates one item, returning the item again.
12961296
pub fn walk_flat_map_item<K: WalkItemKind>(
1297+
visitor: &mut impl MutVisitor,
1298+
item: P<Item<K>>,
1299+
) -> SmallVec<[P<Item<K>>; 1]> {
1300+
walk_flat_map_assoc_item(visitor, item, AssocCtxt::Trait /* ignored */)
1301+
}
1302+
1303+
pub fn walk_flat_map_assoc_item<K: WalkItemKind>(
12971304
visitor: &mut impl MutVisitor,
12981305
mut item: P<Item<K>>,
1306+
ctxt: AssocCtxt,
12991307
) -> SmallVec<[P<Item<K>>; 1]> {
13001308
let Item { ident, attrs, id, kind, vis, span, tokens } = item.deref_mut();
13011309
visitor.visit_id(id);
13021310
visit_attrs(visitor, attrs);
13031311
visitor.visit_vis(vis);
13041312
visitor.visit_ident(ident);
1305-
kind.walk(*span, *id, ident, vis, visitor);
1313+
kind.walk(*span, *id, ident, vis, ctxt, visitor);
13061314
visit_lazy_tts(visitor, tokens);
13071315
visitor.visit_span(span);
13081316
smallvec![item]
13091317
}
13101318

13111319
impl WalkItemKind for ForeignItemKind {
1312-
fn walk(&mut self, span: Span, id: NodeId, ident: &mut Ident, visibility: &mut Visibility, visitor: &mut impl MutVisitor) {
1320+
fn walk(&mut self, span: Span, id: NodeId, ident: &mut Ident, visibility: &mut Visibility, _ctxt: AssocCtxt, visitor: &mut impl MutVisitor) {
13131321
match self {
13141322
ForeignItemKind::Static(box StaticItem { ty, mutability: _, expr, safety: _ }) => {
13151323
visitor.visit_ty(ty);

compiler/rustc_builtin_macros/src/test_harness.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use rustc_ast as ast;
66
use rustc_ast::entry::EntryPointType;
77
use rustc_ast::mut_visit::*;
88
use rustc_ast::ptr::P;
9-
use rustc_ast::visit::{Visitor, walk_item};
9+
use rustc_ast::visit::{walk_item, AssocCtxt, Visitor};
1010
use rustc_ast::{ModKind, attr};
1111
use rustc_errors::DiagCtxtHandle;
1212
use rustc_expand::base::{ExtCtxt, ResolverExpand};
@@ -144,7 +144,7 @@ impl<'a> MutVisitor for TestHarnessGenerator<'a> {
144144
item.kind
145145
{
146146
let prev_tests = mem::take(&mut self.tests);
147-
walk_item_kind(&mut item.kind, item.span, item.id, &mut item.ident, &mut item.vis, self);
147+
walk_item_kind(&mut item.kind, item.span, item.id, &mut item.ident, &mut item.vis, AssocCtxt::Trait /* ignored */, self);
148148
self.add_test_cases(item.id, span, prev_tests);
149149
} else {
150150
// But in those cases, we emit a lint to warn the user of these missing tests.

0 commit comments

Comments
 (0)