Auto merge of #79322 - jyn514:refactor-impl, r=estebank
Separate out a `hir::Impl` struct This makes it possible to pass the `Impl` directly to functions, instead of having to pass each of the many fields one at a time. It also simplifies matches in many cases. See `rustc_save_analysis::dump_visitor::process_impl` or `rustdoc::clean::clean_impl` for a good example of how this makes `impl`s easier to work with. r? `@petrochenkov` maybe?
This commit is contained in:
commit
150d1fee04
61 changed files with 258 additions and 246 deletions
|
@ -409,11 +409,11 @@ impl<'a, 'tcx> Visitor<'tcx> for LifetimeContext<'a, 'tcx> {
|
|||
| hir::ItemKind::Union(_, ref generics)
|
||||
| hir::ItemKind::Trait(_, _, ref generics, ..)
|
||||
| hir::ItemKind::TraitAlias(ref generics, ..)
|
||||
| hir::ItemKind::Impl { ref generics, .. } => {
|
||||
| hir::ItemKind::Impl(hir::Impl { ref generics, .. }) => {
|
||||
self.missing_named_lifetime_spots.push(generics.into());
|
||||
|
||||
// Impls permit `'_` to be used and it is equivalent to "some fresh lifetime name".
|
||||
// This is not true for other kinds of items.x
|
||||
// This is not true for other kinds of items.
|
||||
let track_lifetime_uses = matches!(item.kind, hir::ItemKind::Impl { .. });
|
||||
// These kinds of items have only early-bound lifetime parameters.
|
||||
let mut index = if sub_items_have_self_param(&item.kind) {
|
||||
|
@ -1677,7 +1677,7 @@ impl<'a, 'tcx> LifetimeContext<'a, 'tcx> {
|
|||
}
|
||||
match parent.kind {
|
||||
hir::ItemKind::Trait(_, _, ref generics, ..)
|
||||
| hir::ItemKind::Impl { ref generics, .. } => {
|
||||
| hir::ItemKind::Impl(hir::Impl { ref generics, .. }) => {
|
||||
index += generics.params.len() as u32;
|
||||
}
|
||||
_ => {}
|
||||
|
@ -2102,7 +2102,7 @@ impl<'a, 'tcx> LifetimeContext<'a, 'tcx> {
|
|||
}
|
||||
|
||||
Node::ImplItem(&hir::ImplItem { kind: hir::ImplItemKind::Fn(_, body), .. }) => {
|
||||
if let hir::ItemKind::Impl { ref self_ty, ref items, .. } =
|
||||
if let hir::ItemKind::Impl(hir::Impl { ref self_ty, ref items, .. }) =
|
||||
self.tcx.hir().expect_item(self.tcx.hir().get_parent_item(parent)).kind
|
||||
{
|
||||
impl_self = Some(self_ty);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue