diff options
| author | Camille GILLOT <gillot.camille@gmail.com> | 2021-11-19 22:03:43 +0100 |
|---|---|---|
| committer | Camille GILLOT <gillot.camille@gmail.com> | 2022-04-17 11:03:33 +0200 |
| commit | e47f66dc0d2697aab816fe045fb00195bac18596 (patch) | |
| tree | ff712e0ba6d600f82a0f220202b57bd8d2d42293 /compiler/rustc_ast | |
| parent | aa2b5ef6356f41f9173fe3dc1e5dc3e27290436c (diff) | |
| download | rust-e47f66dc0d2697aab816fe045fb00195bac18596.tar.gz rust-e47f66dc0d2697aab816fe045fb00195bac18596.zip | |
Visit generics inside visit_fn.
Diffstat (limited to 'compiler/rustc_ast')
| -rw-r--r-- | compiler/rustc_ast/src/visit.rs | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/compiler/rustc_ast/src/visit.rs b/compiler/rustc_ast/src/visit.rs index 3183612597d..d925c6dd354 100644 --- a/compiler/rustc_ast/src/visit.rs +++ b/compiler/rustc_ast/src/visit.rs @@ -35,7 +35,7 @@ pub enum FnCtxt { #[derive(Copy, Clone, Debug)] pub enum FnKind<'a> { /// E.g., `fn foo()`, `fn foo(&self)`, or `extern "Abi" fn foo()`. - Fn(FnCtxt, Ident, &'a FnSig, &'a Visibility, Option<&'a Block>), + Fn(FnCtxt, Ident, &'a FnSig, &'a Visibility, &'a Generics, Option<&'a Block>), /// E.g., `|x, y| body`. Closure(&'a FnDecl, &'a Expr), @@ -44,7 +44,7 @@ pub enum FnKind<'a> { impl<'a> FnKind<'a> { pub fn header(&self) -> Option<&'a FnHeader> { match *self { - FnKind::Fn(_, _, sig, _, _) => Some(&sig.header), + FnKind::Fn(_, _, sig, _, _, _) => Some(&sig.header), FnKind::Closure(_, _) => None, } } @@ -58,7 +58,7 @@ impl<'a> FnKind<'a> { pub fn decl(&self) -> &'a FnDecl { match self { - FnKind::Fn(_, _, sig, _, _) => &sig.decl, + FnKind::Fn(_, _, sig, _, _, _) => &sig.decl, FnKind::Closure(decl, _) => decl, } } @@ -295,8 +295,8 @@ pub fn walk_item<'a, V: Visitor<'a>>(visitor: &mut V, item: &'a Item) { walk_list!(visitor, visit_expr, expr); } ItemKind::Fn(box Fn { defaultness: _, ref generics, ref sig, ref body }) => { - visitor.visit_generics(generics); - let kind = FnKind::Fn(FnCtxt::Free, item.ident, sig, &item.vis, body.as_deref()); + let kind = + FnKind::Fn(FnCtxt::Free, item.ident, sig, &item.vis, generics, body.as_deref()); visitor.visit_fn(kind, item.span, item.id) } ItemKind::Mod(_unsafety, ref mod_kind) => match mod_kind { @@ -561,8 +561,7 @@ pub fn walk_foreign_item<'a, V: Visitor<'a>>(visitor: &mut V, item: &'a ForeignI walk_list!(visitor, visit_expr, expr); } ForeignItemKind::Fn(box Fn { defaultness: _, ref generics, ref sig, ref body }) => { - visitor.visit_generics(generics); - let kind = FnKind::Fn(FnCtxt::Foreign, ident, sig, vis, body.as_deref()); + let kind = FnKind::Fn(FnCtxt::Foreign, ident, sig, vis, generics, body.as_deref()); visitor.visit_fn(kind, span, id); } ForeignItemKind::TyAlias(box TyAlias { generics, bounds, ty, .. }) => { @@ -644,7 +643,8 @@ pub fn walk_fn_decl<'a, V: Visitor<'a>>(visitor: &mut V, function_declaration: & pub fn walk_fn<'a, V: Visitor<'a>>(visitor: &mut V, kind: FnKind<'a>, _span: Span) { match kind { - FnKind::Fn(_, _, sig, _, body) => { + FnKind::Fn(_, _, sig, _, generics, body) => { + visitor.visit_generics(generics); visitor.visit_fn_header(&sig.header); walk_fn_decl(visitor, &sig.decl); walk_list!(visitor, visit_block, body); @@ -667,8 +667,7 @@ pub fn walk_assoc_item<'a, V: Visitor<'a>>(visitor: &mut V, item: &'a AssocItem, walk_list!(visitor, visit_expr, expr); } AssocItemKind::Fn(box Fn { defaultness: _, ref generics, ref sig, ref body }) => { - visitor.visit_generics(generics); - let kind = FnKind::Fn(FnCtxt::Assoc(ctxt), ident, sig, vis, body.as_deref()); + let kind = FnKind::Fn(FnCtxt::Assoc(ctxt), ident, sig, vis, generics, body.as_deref()); visitor.visit_fn(kind, span, id); } AssocItemKind::TyAlias(box TyAlias { generics, bounds, ty, .. }) => { |
