Adapt comments.
This commit is contained in:
parent
d693e19268
commit
d804ef8be8
1 changed files with 12 additions and 12 deletions
|
@ -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),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue