1
Fork 0

Adapt comments.

This commit is contained in:
Camille GILLOT 2024-10-05 12:13:24 +00:00
parent d693e19268
commit d804ef8be8

View file

@ -152,11 +152,14 @@ enum Scope<'a> {
s: ScopeRef<'a>, s: ScopeRef<'a>,
}, },
/// Resolve the lifetimes in the bounds to the lifetime defs in the generics. /// Remap lifetimes that appear in opaque types to fresh lifetime parameters. Given:
/// `fn foo<'a>() -> impl MyTrait<'a> { ... }` desugars to /// `fn foo<'a>() -> impl MyTrait<'a> { ... }`
///
/// HIR tells us that `'a` refer to the lifetime bound on `foo`.
/// However, typeck and borrowck for opaques are work based on using a new generics type.
/// `type MyAnonTy<'b> = impl MyTrait<'b>;` /// `type MyAnonTy<'b> = impl MyTrait<'b>;`
/// ^ ^ this gets resolved in the scope of ///
/// the opaque_ty generics /// This scope collects the mapping `'a -> 'b`.
Opaque { Opaque {
/// The opaque type we are traversing. /// The opaque type we are traversing.
def_id: LocalDefId, def_id: LocalDefId,
@ -547,11 +550,11 @@ impl<'a, 'tcx> Visitor<'tcx> for BoundVarContext<'a, 'tcx> {
} }
} }
/// Resolve the lifetimes that are applied to the opaque type. /// Resolve the lifetimes inside the opaque type, and save them into
/// These are resolved in the current scope. /// `opaque_captured_lifetimes`.
/// `fn foo<'a>() -> impl MyTrait<'a> { ... }` desugars to ///
/// `fn foo<'a>() -> MyAnonTy<'a> { ... }` /// This method has special handling for opaques that capture all lifetimes,
/// ^ ^this gets resolved in the current scope /// like async desugaring.
#[instrument(level = "debug", skip(self))] #[instrument(level = "debug", skip(self))]
fn visit_opaque_ty(&mut self, opaque: &'tcx rustc_hir::OpaqueTy<'tcx>) { fn visit_opaque_ty(&mut self, opaque: &'tcx rustc_hir::OpaqueTy<'tcx>) {
let mut captures = FxIndexMap::default(); let mut captures = FxIndexMap::default();
@ -815,9 +818,6 @@ impl<'a, 'tcx> Visitor<'tcx> for BoundVarContext<'a, 'tcx> {
}; };
self.with(scope, |this| this.visit_ty(mt.ty)); self.with(scope, |this| this.visit_ty(mt.ty));
} }
hir::TyKind::OpaqueDef(opaque_ty) => {
self.visit_opaque_ty(opaque_ty);
}
_ => intravisit::walk_ty(self, ty), _ => intravisit::walk_ty(self, ty),
} }
} }