Rollup merge of #117830 - Nilstrieb:object-lifetime-default-nits, r=cjgillot
Small improvements in object lifetime default code I found those while trying to understand how the code works.
This commit is contained in:
commit
826b181cef
@ -2845,6 +2845,7 @@ fn validate_late_bound_regions(
|
||||
/// provided, if they provided one, and otherwise search the supertypes of trait bounds
|
||||
/// for region bounds. It may be that we can derive no bound at all, in which case
|
||||
/// we return `None`.
|
||||
#[instrument(level = "debug", skip(self, span), ret)]
|
||||
fn compute_object_lifetime_bound(
|
||||
&self,
|
||||
span: Span,
|
||||
@ -2853,8 +2854,6 @@ fn compute_object_lifetime_bound(
|
||||
{
|
||||
let tcx = self.tcx();
|
||||
|
||||
debug!("compute_opt_region_bound(existential_predicates={:?})", existential_predicates);
|
||||
|
||||
// No explicit region bound specified. Therefore, examine trait
|
||||
// bounds and see if we can derive region bounds from those.
|
||||
let derived_region_bounds = object_region_bounds(tcx, existential_predicates);
|
||||
|
@ -1848,8 +1848,8 @@ fn visit_fn_like_elision(
|
||||
}
|
||||
}
|
||||
|
||||
#[instrument(level = "debug", skip(self))]
|
||||
fn resolve_object_lifetime_default(&mut self, lifetime_ref: &'tcx hir::Lifetime) {
|
||||
debug!("resolve_object_lifetime_default(lifetime_ref={:?})", lifetime_ref);
|
||||
let mut late_depth = 0;
|
||||
let mut scope = self.scope;
|
||||
let lifetime = loop {
|
||||
|
@ -913,20 +913,15 @@ pub fn object_region_bounds<'tcx>(
|
||||
tcx: TyCtxt<'tcx>,
|
||||
existential_predicates: &'tcx ty::List<ty::PolyExistentialPredicate<'tcx>>,
|
||||
) -> Vec<ty::Region<'tcx>> {
|
||||
// Since we don't actually *know* the self type for an object,
|
||||
// this "open(err)" serves as a kind of dummy standin -- basically
|
||||
// a placeholder type.
|
||||
let open_ty = Ty::new_fresh(tcx, 0);
|
||||
|
||||
let predicates = existential_predicates.iter().filter_map(|predicate| {
|
||||
if let ty::ExistentialPredicate::Projection(_) = predicate.skip_binder() {
|
||||
None
|
||||
} else {
|
||||
Some(predicate.with_self_ty(tcx, open_ty))
|
||||
Some(predicate.with_self_ty(tcx, tcx.types.trait_object_dummy_self))
|
||||
}
|
||||
});
|
||||
|
||||
required_region_bounds(tcx, open_ty, predicates)
|
||||
required_region_bounds(tcx, tcx.types.trait_object_dummy_self, predicates)
|
||||
}
|
||||
|
||||
/// Given a set of predicates that apply to an object type, returns
|
||||
|
Loading…
Reference in New Issue
Block a user