Tweak FulfillProcessor
.
Avoids some unnecessary references and lifetimes.
This commit is contained in:
parent
f3fafbb006
commit
b69c335327
@ -102,7 +102,7 @@ pub fn new_in_snapshot() -> FulfillmentContext<'tcx> {
|
||||
}
|
||||
|
||||
/// Attempts to select obligations using `selcx`.
|
||||
fn select(&mut self, selcx: &mut SelectionContext<'a, 'tcx>) -> Vec<FulfillmentError<'tcx>> {
|
||||
fn select(&mut self, selcx: SelectionContext<'a, 'tcx>) -> Vec<FulfillmentError<'tcx>> {
|
||||
let span = debug_span!("select", obligation_forest_size = ?self.predicates.len());
|
||||
let _enter = span.enter();
|
||||
|
||||
@ -197,8 +197,8 @@ fn select_where_possible(
|
||||
&mut self,
|
||||
infcx: &InferCtxt<'_, 'tcx>,
|
||||
) -> Vec<FulfillmentError<'tcx>> {
|
||||
let mut selcx = SelectionContext::new(infcx);
|
||||
self.select(&mut selcx)
|
||||
let selcx = SelectionContext::new(infcx);
|
||||
self.select(selcx)
|
||||
}
|
||||
|
||||
fn pending_obligations(&self) -> Vec<PredicateObligation<'tcx>> {
|
||||
@ -210,8 +210,8 @@ fn relationships(&mut self) -> &mut FxHashMap<ty::TyVid, ty::FoundRelationships>
|
||||
}
|
||||
}
|
||||
|
||||
struct FulfillProcessor<'a, 'b, 'tcx> {
|
||||
selcx: &'a mut SelectionContext<'b, 'tcx>,
|
||||
struct FulfillProcessor<'a, 'tcx> {
|
||||
selcx: SelectionContext<'a, 'tcx>,
|
||||
}
|
||||
|
||||
fn mk_pending(os: Vec<PredicateObligation<'_>>) -> Vec<PendingPredicateObligation<'_>> {
|
||||
@ -220,7 +220,7 @@ fn mk_pending(os: Vec<PredicateObligation<'_>>) -> Vec<PendingPredicateObligatio
|
||||
.collect()
|
||||
}
|
||||
|
||||
impl<'a, 'b, 'tcx> ObligationProcessor for FulfillProcessor<'a, 'b, 'tcx> {
|
||||
impl<'a, 'tcx> ObligationProcessor for FulfillProcessor<'a, 'tcx> {
|
||||
type Obligation = PendingPredicateObligation<'tcx>;
|
||||
type Error = FulfillmentErrorCode<'tcx>;
|
||||
type OUT = Outcome<Self::Obligation, Self::Error>;
|
||||
@ -291,7 +291,7 @@ fn process_obligation(
|
||||
if obligation.predicate.has_projections() {
|
||||
let mut obligations = Vec::new();
|
||||
let predicate = crate::traits::project::try_normalize_with_depth_to(
|
||||
self.selcx,
|
||||
&mut self.selcx,
|
||||
obligation.param_env,
|
||||
obligation.cause.clone(),
|
||||
obligation.recursion_depth + 1,
|
||||
@ -608,7 +608,7 @@ fn process_backedge<'c, I>(
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, 'b, 'tcx> FulfillProcessor<'a, 'b, 'tcx> {
|
||||
impl<'a, 'tcx> FulfillProcessor<'a, 'tcx> {
|
||||
#[instrument(level = "debug", skip(self, obligation, stalled_on))]
|
||||
fn process_trait_obligation(
|
||||
&mut self,
|
||||
@ -643,7 +643,7 @@ fn process_trait_obligation(
|
||||
// information about the types in the trait.
|
||||
stalled_on.clear();
|
||||
stalled_on.extend(substs_infer_vars(
|
||||
self.selcx,
|
||||
&self.selcx,
|
||||
trait_obligation.predicate.map_bound(|pred| pred.trait_ref.substs),
|
||||
));
|
||||
|
||||
@ -695,12 +695,12 @@ fn process_projection_obligation(
|
||||
}
|
||||
}
|
||||
|
||||
match project::poly_project_and_unify_type(self.selcx, &project_obligation) {
|
||||
match project::poly_project_and_unify_type(&mut self.selcx, &project_obligation) {
|
||||
ProjectAndUnifyResult::Holds(os) => ProcessResult::Changed(mk_pending(os)),
|
||||
ProjectAndUnifyResult::FailedNormalization => {
|
||||
stalled_on.clear();
|
||||
stalled_on.extend(substs_infer_vars(
|
||||
self.selcx,
|
||||
&self.selcx,
|
||||
project_obligation.predicate.map_bound(|pred| pred.projection_ty.substs),
|
||||
));
|
||||
ProcessResult::Unchanged
|
||||
@ -718,7 +718,7 @@ fn process_projection_obligation(
|
||||
|
||||
/// Returns the set of inference variables contained in `substs`.
|
||||
fn substs_infer_vars<'a, 'tcx>(
|
||||
selcx: &mut SelectionContext<'a, 'tcx>,
|
||||
selcx: &SelectionContext<'a, 'tcx>,
|
||||
substs: ty::Binder<'tcx, SubstsRef<'tcx>>,
|
||||
) -> impl Iterator<Item = TyOrConstInferVar<'tcx>> {
|
||||
selcx
|
||||
|
Loading…
Reference in New Issue
Block a user