Skip to content

Commit 1ca467d

Browse files
committed
change make_query_outlives to take an iterator
1 parent a9d4967 commit 1ca467d

File tree

2 files changed

+18
-10
lines changed

2 files changed

+18
-10
lines changed

src/librustc/infer/canonical/query_result.rs

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,19 +24,18 @@ use infer::canonical::{
2424
};
2525
use infer::region_constraints::{Constraint, RegionConstraintData};
2626
use infer::InferCtxtBuilder;
27-
use infer::{InferCtxt, InferOk, InferResult, RegionObligation};
27+
use infer::{InferCtxt, InferOk, InferResult};
2828
use rustc_data_structures::indexed_vec::Idx;
2929
use rustc_data_structures::indexed_vec::IndexVec;
3030
use rustc_data_structures::sync::Lrc;
3131
use std::fmt::Debug;
32-
use syntax::ast;
3332
use syntax_pos::DUMMY_SP;
3433
use traits::query::{Fallible, NoSolution};
3534
use traits::{FulfillmentContext, TraitEngine};
3635
use traits::{Obligation, ObligationCause, PredicateObligation};
3736
use ty::fold::TypeFoldable;
3837
use ty::subst::{Kind, UnpackedKind};
39-
use ty::{self, CanonicalVar, Lift, TyCtxt};
38+
use ty::{self, CanonicalVar, Lift, Ty, TyCtxt};
4039

4140
impl<'cx, 'gcx, 'tcx> InferCtxtBuilder<'cx, 'gcx, 'tcx> {
4241
/// The "main method" for a canonicalized trait query. Given the
@@ -157,7 +156,12 @@ impl<'cx, 'gcx, 'tcx> InferCtxt<'cx, 'gcx, 'tcx> {
157156

158157
let region_obligations = self.take_registered_region_obligations();
159158
let region_constraints = self.with_region_constraints(|region_constraints| {
160-
make_query_outlives(tcx, region_obligations, region_constraints)
159+
make_query_outlives(
160+
tcx,
161+
region_obligations
162+
.iter()
163+
.map(|(_, r_o)| (r_o.sup_type, r_o.sub_region)),
164+
region_constraints)
161165
});
162166

163167
let certainty = if ambig_errors.is_empty() {
@@ -567,7 +571,7 @@ impl<'cx, 'gcx, 'tcx> InferCtxt<'cx, 'gcx, 'tcx> {
567571
/// creates query region constraints.
568572
pub fn make_query_outlives<'tcx>(
569573
tcx: TyCtxt<'_, '_, 'tcx>,
570-
region_obligations: Vec<(ast::NodeId, RegionObligation<'tcx>)>,
574+
outlives_obligations: impl Iterator<Item = (Ty<'tcx>, ty::Region<'tcx>)>,
571575
region_constraints: &RegionConstraintData<'tcx>,
572576
) -> Vec<QueryRegionConstraint<'tcx>> {
573577
let RegionConstraintData {
@@ -600,9 +604,8 @@ pub fn make_query_outlives<'tcx>(
600604
.collect();
601605

602606
outlives.extend(
603-
region_obligations
604-
.into_iter()
605-
.map(|(_, r_o)| ty::OutlivesPredicate(r_o.sup_type.into(), r_o.sub_region))
607+
outlives_obligations
608+
.map(|(ty, r)| ty::OutlivesPredicate(ty.into(), r))
606609
.map(ty::Binder::dummy), // no bound regions in the code above
607610
);
608611

src/librustc/traits/query/type_op/custom.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,13 @@ fn scrape_region_constraints<'gcx, 'tcx, R>(
102102

103103
let region_constraint_data = infcx.take_and_reset_region_constraints();
104104

105-
let outlives =
106-
query_result::make_query_outlives(infcx.tcx, region_obligations, &region_constraint_data);
105+
let outlives = query_result::make_query_outlives(
106+
infcx.tcx,
107+
region_obligations
108+
.iter()
109+
.map(|(_, r_o)| (r_o.sup_type, r_o.sub_region)),
110+
&region_constraint_data,
111+
);
107112

108113
if outlives.is_empty() {
109114
Ok((value, None))

0 commit comments

Comments
 (0)