@@ -37,7 +37,7 @@ impl<A: Array> ExpectOne<A> for SmallVec<A> {
37
37
}
38
38
39
39
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 ) ;
41
41
}
42
42
43
43
pub trait MutVisitor : Sized {
@@ -114,9 +114,9 @@ pub trait MutVisitor: Sized {
114
114
fn flat_map_assoc_item (
115
115
& mut self ,
116
116
i : P < AssocItem > ,
117
- _ctxt : AssocCtxt ,
117
+ ctxt : AssocCtxt ,
118
118
) -> SmallVec < [ P < AssocItem > ; 1 ] > {
119
- walk_flat_map_item ( self , i)
119
+ walk_flat_map_assoc_item ( self , i, ctxt )
120
120
}
121
121
122
122
fn visit_fn_decl ( & mut self , d : & mut P < FnDecl > ) {
@@ -1086,13 +1086,14 @@ pub fn walk_item_kind(
1086
1086
id : NodeId ,
1087
1087
ident : & mut Ident ,
1088
1088
visibility : & mut Visibility ,
1089
+ ctxt : AssocCtxt ,
1089
1090
vis : & mut impl MutVisitor ,
1090
1091
) {
1091
- kind. walk ( span, id, ident, visibility, vis)
1092
+ kind. walk ( span, id, ident, visibility, ctxt , vis)
1092
1093
}
1093
1094
1094
1095
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 ) {
1096
1097
match self {
1097
1098
ItemKind :: ExternCrate ( _orig_name) => { }
1098
1099
ItemKind :: Use ( use_tree) => vis. visit_use_tree ( use_tree) ,
@@ -1204,15 +1205,15 @@ impl WalkItemKind for ItemKind {
1204
1205
}
1205
1206
1206
1207
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 ) {
1208
1209
match self {
1209
1210
AssocItemKind :: Const ( item) => {
1210
1211
visit_const_item ( item, visitor) ;
1211
1212
}
1212
1213
AssocItemKind :: Fn ( box Fn { defaultness, generics, sig, body } ) => {
1213
1214
visit_defaultness ( visitor, defaultness) ;
1214
1215
// 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) ;
1216
1217
}
1217
1218
AssocItemKind :: Type ( box TyAlias {
1218
1219
defaultness,
@@ -1292,24 +1293,31 @@ pub fn walk_crate<T: MutVisitor>(vis: &mut T, krate: &mut Crate) {
1292
1293
vis. visit_span ( inject_use_span) ;
1293
1294
}
1294
1295
1295
- /// Mutates one item, returning the item again.
1296
1296
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 > (
1297
1304
visitor : & mut impl MutVisitor ,
1298
1305
mut item : P < Item < K > > ,
1306
+ ctxt : AssocCtxt ,
1299
1307
) -> SmallVec < [ P < Item < K > > ; 1 ] > {
1300
1308
let Item { ident, attrs, id, kind, vis, span, tokens } = item. deref_mut ( ) ;
1301
1309
visitor. visit_id ( id) ;
1302
1310
visit_attrs ( visitor, attrs) ;
1303
1311
visitor. visit_vis ( vis) ;
1304
1312
visitor. visit_ident ( ident) ;
1305
- kind. walk ( * span, * id, ident, vis, visitor) ;
1313
+ kind. walk ( * span, * id, ident, vis, ctxt , visitor) ;
1306
1314
visit_lazy_tts ( visitor, tokens) ;
1307
1315
visitor. visit_span ( span) ;
1308
1316
smallvec ! [ item]
1309
1317
}
1310
1318
1311
1319
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 ) {
1313
1321
match self {
1314
1322
ForeignItemKind :: Static ( box StaticItem { ty, mutability : _, expr, safety : _ } ) => {
1315
1323
visitor. visit_ty ( ty) ;
0 commit comments