@@ -23,7 +23,7 @@ use crate::ast::*;
2323use crate :: ptr:: P ;
2424use crate :: token:: { self , Token } ;
2525use crate :: tokenstream:: * ;
26- use crate :: visit:: { AssocCtxt , BoundKind } ;
26+ use crate :: visit:: { AssocCtxt , BoundKind , FnCtxt } ;
2727
2828pub trait ExpectOne < A : Array > {
2929 fn expect_one ( self , err : & ' static str ) -> A :: Item ;
@@ -37,7 +37,7 @@ impl<A: Array> ExpectOne<A> for SmallVec<A> {
3737}
3838
3939pub trait WalkItemKind {
40- fn walk ( & mut self , span : Span , id : NodeId , visitor : & mut impl MutVisitor ) ;
40+ fn walk ( & mut self , span : Span , id : NodeId , ident : & mut Ident , visibility : & mut Visibility , visitor : & mut impl MutVisitor ) ;
4141}
4242
4343pub trait MutVisitor : Sized {
@@ -880,7 +880,7 @@ fn walk_coroutine_kind<T: MutVisitor>(vis: &mut T, coroutine_kind: &mut Coroutin
880880
881881fn walk_fn < T : MutVisitor > ( vis : & mut T , kind : FnKind < ' _ > ) {
882882 match kind {
883- FnKind :: Fn ( FnSig { header, decl, span } , generics, body) => {
883+ FnKind :: Fn ( _ctxt , _ident , FnSig { header, decl, span } , _visibility , generics, body) => {
884884 // Identifier and visibility are visited as a part of the item.
885885 vis. visit_fn_header ( header) ;
886886 vis. visit_generics ( generics) ;
@@ -890,8 +890,9 @@ fn walk_fn<T: MutVisitor>(vis: &mut T, kind: FnKind<'_>) {
890890 }
891891 vis. visit_span ( span) ;
892892 }
893- FnKind :: Closure ( binder, decl, body) => {
893+ FnKind :: Closure ( binder, coroutine_kind , decl, body) => {
894894 vis. visit_closure_binder ( binder) ;
895+ coroutine_kind. as_mut ( ) . map ( |coroutine_kind| vis. visit_coroutine_kind ( coroutine_kind) ) ;
895896 vis. visit_fn_decl ( decl) ;
896897 vis. visit_expr ( body) ;
897898 }
@@ -1083,13 +1084,15 @@ pub fn walk_item_kind(
10831084 kind : & mut impl WalkItemKind ,
10841085 span : Span ,
10851086 id : NodeId ,
1087+ ident : & mut Ident ,
1088+ visibility : & mut Visibility ,
10861089 vis : & mut impl MutVisitor ,
10871090) {
1088- kind. walk ( span, id, vis)
1091+ kind. walk ( span, id, ident , visibility , vis)
10891092}
10901093
10911094impl WalkItemKind for ItemKind {
1092- fn walk ( & mut self , span : Span , id : NodeId , vis : & mut impl MutVisitor ) {
1095+ fn walk ( & mut self , span : Span , id : NodeId , ident : & mut Ident , visibility : & mut Visibility , vis : & mut impl MutVisitor ) {
10931096 match self {
10941097 ItemKind :: ExternCrate ( _orig_name) => { }
10951098 ItemKind :: Use ( use_tree) => vis. visit_use_tree ( use_tree) ,
@@ -1102,7 +1105,7 @@ impl WalkItemKind for ItemKind {
11021105 }
11031106 ItemKind :: Fn ( box Fn { defaultness, generics, sig, body } ) => {
11041107 visit_defaultness ( vis, defaultness) ;
1105- vis. visit_fn ( FnKind :: Fn ( sig, generics, body) , span, id) ;
1108+ vis. visit_fn ( FnKind :: Fn ( FnCtxt :: Free , ident , sig, visibility , generics, body) , span, id) ;
11061109 }
11071110 ItemKind :: Mod ( safety, mod_kind) => {
11081111 visit_safety ( vis, safety) ;
@@ -1201,14 +1204,15 @@ impl WalkItemKind for ItemKind {
12011204}
12021205
12031206impl WalkItemKind for AssocItemKind {
1204- fn walk ( & mut self , span : Span , id : NodeId , visitor : & mut impl MutVisitor ) {
1207+ fn walk ( & mut self , span : Span , id : NodeId , ident : & mut Ident , visibility : & mut Visibility , visitor : & mut impl MutVisitor ) {
12051208 match self {
12061209 AssocItemKind :: Const ( item) => {
12071210 visit_const_item ( item, visitor) ;
12081211 }
12091212 AssocItemKind :: Fn ( box Fn { defaultness, generics, sig, body } ) => {
12101213 visit_defaultness ( visitor, defaultness) ;
1211- visitor. visit_fn ( FnKind :: Fn ( sig, generics, body) , span, id) ;
1214+ // TODO: use AssocCtxt
1215+ visitor. visit_fn ( FnKind :: Fn ( FnCtxt :: Free , ident, sig, visibility, generics, body) , span, id) ;
12121216 }
12131217 AssocItemKind :: Type ( box TyAlias {
12141218 defaultness,
@@ -1298,22 +1302,22 @@ pub fn walk_flat_map_item<K: WalkItemKind>(
12981302 visit_attrs ( visitor, attrs) ;
12991303 visitor. visit_vis ( vis) ;
13001304 visitor. visit_ident ( ident) ;
1301- kind. walk ( * span, * id, visitor) ;
1305+ kind. walk ( * span, * id, ident , vis , visitor) ;
13021306 visit_lazy_tts ( visitor, tokens) ;
13031307 visitor. visit_span ( span) ;
13041308 smallvec ! [ item]
13051309}
13061310
13071311impl WalkItemKind for ForeignItemKind {
1308- fn walk ( & mut self , span : Span , id : NodeId , visitor : & mut impl MutVisitor ) {
1312+ fn walk ( & mut self , span : Span , id : NodeId , ident : & mut Ident , visibility : & mut Visibility , visitor : & mut impl MutVisitor ) {
13091313 match self {
13101314 ForeignItemKind :: Static ( box StaticItem { ty, mutability : _, expr, safety : _ } ) => {
13111315 visitor. visit_ty ( ty) ;
13121316 visit_opt ( expr, |expr| visitor. visit_expr ( expr) ) ;
13131317 }
13141318 ForeignItemKind :: Fn ( box Fn { defaultness, generics, sig, body } ) => {
13151319 visit_defaultness ( visitor, defaultness) ;
1316- visitor. visit_fn ( FnKind :: Fn ( sig, generics, body) , span, id) ;
1320+ visitor. visit_fn ( FnKind :: Fn ( FnCtxt :: Foreign , ident , sig, visibility , generics, body) , span, id) ;
13171321 }
13181322 ForeignItemKind :: TyAlias ( box TyAlias {
13191323 defaultness,
@@ -1522,9 +1526,8 @@ pub fn walk_expr<T: MutVisitor>(vis: &mut T, Expr { kind, id, span, attrs, token
15221526 fn_arg_span,
15231527 } ) => {
15241528 visit_constness ( vis, constness) ;
1525- coroutine_kind. as_mut ( ) . map ( |coroutine_kind| vis. visit_coroutine_kind ( coroutine_kind) ) ;
15261529 vis. visit_capture_by ( capture_clause) ;
1527- vis. visit_fn ( FnKind :: Closure ( binder, fn_decl, body) , * span, * id) ;
1530+ vis. visit_fn ( FnKind :: Closure ( binder, coroutine_kind , fn_decl, body) , * span, * id) ;
15281531 vis. visit_span ( fn_decl_span) ;
15291532 vis. visit_span ( fn_arg_span) ;
15301533 }
@@ -1785,8 +1788,8 @@ impl<N: DummyAstNode, T: DummyAstNode> DummyAstNode for crate::ast_traits::AstNo
17851788#[ derive( Debug ) ]
17861789pub enum FnKind < ' a > {
17871790 /// E.g., `fn foo()`, `fn foo(&self)`, or `extern "Abi" fn foo()`.
1788- Fn ( & ' a mut FnSig , & ' a mut Generics , & ' a mut Option < P < Block > > ) ,
1791+ Fn ( FnCtxt , & ' a mut Ident , & ' a mut FnSig , & ' a mut Visibility , & ' a mut Generics , & ' a mut Option < P < Block > > ) ,
17891792
17901793 /// E.g., `|x, y| body`.
1791- Closure ( & ' a mut ClosureBinder , & ' a mut P < FnDecl > , & ' a mut P < Expr > ) ,
1794+ Closure ( & ' a mut ClosureBinder , & ' a mut Option < CoroutineKind > , & ' a mut P < FnDecl > , & ' a mut P < Expr > ) ,
17921795}
0 commit comments