diff options
| author | scalexm <alexandre@scalexm.fr> | 2018-11-28 23:29:01 +0100 |
|---|---|---|
| committer | scalexm <alexandre@scalexm.fr> | 2018-12-27 19:21:16 +0100 |
| commit | 26e0ea8148bf8b6a244d9df0916cc78ac257b277 (patch) | |
| tree | 6fa6a391770a0e484059baf741d6da84dae7b8d4 /src | |
| parent | da9467d1470a8f81519d5e428d8cec90950007f9 (diff) | |
| download | rust-26e0ea8148bf8b6a244d9df0916cc78ac257b277.tar.gz rust-26e0ea8148bf8b6a244d9df0916cc78ac257b277.zip | |
Use `TraitEngine` in `enter_canonical_trait_query`
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc/infer/canonical/query_response.rs | 18 | ||||
| -rw-r--r-- | src/librustc/infer/mod.rs | 2 | ||||
| -rw-r--r-- | src/librustc/traits/select.rs | 13 | ||||
| -rw-r--r-- | src/librustc_traits/dropck_outlives.rs | 10 | ||||
| -rw-r--r-- | src/librustc_traits/type_op.rs | 6 |
5 files changed, 30 insertions, 19 deletions
diff --git a/src/librustc/infer/canonical/query_response.rs b/src/librustc/infer/canonical/query_response.rs index e940acc06e1..7f113f07276 100644 --- a/src/librustc/infer/canonical/query_response.rs +++ b/src/librustc/infer/canonical/query_response.rs @@ -21,7 +21,7 @@ use rustc_data_structures::sync::Lrc; use std::fmt::Debug; use syntax_pos::DUMMY_SP; use traits::query::{Fallible, NoSolution}; -use traits::{FulfillmentContext, TraitEngine}; +use traits::TraitEngine; use traits::{Obligation, ObligationCause, PredicateObligation}; use ty::fold::TypeFoldable; use ty::subst::{Kind, UnpackedKind}; @@ -48,7 +48,7 @@ impl<'cx, 'gcx, 'tcx> InferCtxtBuilder<'cx, 'gcx, 'tcx> { pub fn enter_canonical_trait_query<K, R>( &'tcx mut self, canonical_key: &Canonical<'tcx, K>, - operation: impl FnOnce(&InferCtxt<'_, 'gcx, 'tcx>, &mut FulfillmentContext<'tcx>, K) + operation: impl FnOnce(&InferCtxt<'_, 'gcx, 'tcx>, &mut dyn TraitEngine<'tcx>, K) -> Fallible<R>, ) -> Fallible<CanonicalizedQueryResponse<'gcx, R>> where @@ -59,9 +59,13 @@ impl<'cx, 'gcx, 'tcx> InferCtxtBuilder<'cx, 'gcx, 'tcx> { DUMMY_SP, canonical_key, |ref infcx, key, canonical_inference_vars| { - let fulfill_cx = &mut FulfillmentContext::new(); - let value = operation(infcx, fulfill_cx, key)?; - infcx.make_canonicalized_query_response(canonical_inference_vars, value, fulfill_cx) + let mut fulfill_cx = TraitEngine::new(infcx.tcx); + let value = operation(infcx, &mut *fulfill_cx, key)?; + infcx.make_canonicalized_query_response( + canonical_inference_vars, + value, + &mut *fulfill_cx + ) }, ) } @@ -91,7 +95,7 @@ impl<'cx, 'gcx, 'tcx> InferCtxt<'cx, 'gcx, 'tcx> { &self, inference_vars: CanonicalVarValues<'tcx>, answer: T, - fulfill_cx: &mut FulfillmentContext<'tcx>, + fulfill_cx: &mut dyn TraitEngine<'tcx>, ) -> Fallible<CanonicalizedQueryResponse<'gcx, T>> where T: Debug + Lift<'gcx> + TypeFoldable<'tcx>, @@ -138,7 +142,7 @@ impl<'cx, 'gcx, 'tcx> InferCtxt<'cx, 'gcx, 'tcx> { &self, inference_vars: CanonicalVarValues<'tcx>, answer: T, - fulfill_cx: &mut FulfillmentContext<'tcx>, + fulfill_cx: &mut dyn TraitEngine<'tcx>, ) -> Result<QueryResponse<'tcx, T>, NoSolution> where T: Debug + TypeFoldable<'tcx> + Lift<'gcx>, diff --git a/src/librustc/infer/mod.rs b/src/librustc/infer/mod.rs index b8a7014c943..c000e3aa013 100644 --- a/src/librustc/infer/mod.rs +++ b/src/librustc/infer/mod.rs @@ -581,7 +581,7 @@ impl<'tcx, T> InferOk<'tcx, T> { pub fn into_value_registering_obligations( self, infcx: &InferCtxt<'_, '_, 'tcx>, - fulfill_cx: &mut impl TraitEngine<'tcx>, + fulfill_cx: &mut dyn TraitEngine<'tcx>, ) -> T { let InferOk { value, obligations } = self; for obligation in obligations { diff --git a/src/librustc/traits/select.rs b/src/librustc/traits/select.rs index 48518eb6460..bd347764cc6 100644 --- a/src/librustc/traits/select.rs +++ b/src/librustc/traits/select.rs @@ -3243,11 +3243,14 @@ impl<'cx, 'gcx, 'tcx> SelectionContext<'cx, 'gcx, 'tcx> { trait_ref, )?); - obligations.push(Obligation::new( - obligation.cause.clone(), - obligation.param_env, - ty::Predicate::ClosureKind(closure_def_id, substs, kind), - )); + // FIXME: chalk + if !self.tcx().sess.opts.debugging_opts.chalk { + obligations.push(Obligation::new( + obligation.cause.clone(), + obligation.param_env, + ty::Predicate::ClosureKind(closure_def_id, substs, kind), + )); + } Ok(VtableClosureData { closure_def_id, diff --git a/src/librustc_traits/dropck_outlives.rs b/src/librustc_traits/dropck_outlives.rs index b16da2695fe..7979fe4a750 100644 --- a/src/librustc_traits/dropck_outlives.rs +++ b/src/librustc_traits/dropck_outlives.rs @@ -2,7 +2,7 @@ use rustc::hir::def_id::DefId; use rustc::infer::canonical::{Canonical, QueryResponse}; use rustc::traits::query::dropck_outlives::{DropckOutlivesResult, DtorckConstraint}; use rustc::traits::query::{CanonicalTyGoal, NoSolution}; -use rustc::traits::{FulfillmentContext, Normalized, ObligationCause, TraitEngineExt}; +use rustc::traits::{TraitEngine, Normalized, ObligationCause, TraitEngineExt}; use rustc::ty::query::Providers; use rustc::ty::subst::{Subst, Substs}; use rustc::ty::{self, ParamEnvAnd, Ty, TyCtxt}; @@ -78,7 +78,7 @@ fn dropck_outlives<'tcx>( // Set used to detect infinite recursion. let mut ty_set = FxHashSet::default(); - let fulfill_cx = &mut FulfillmentContext::new(); + let mut fulfill_cx = TraitEngine::new(infcx.tcx); let cause = ObligationCause::dummy(); while let Some((ty, depth)) = ty_stack.pop() { @@ -136,7 +136,11 @@ fn dropck_outlives<'tcx>( debug!("dropck_outlives: result = {:#?}", result); - infcx.make_canonicalized_query_response(canonical_inference_vars, result, fulfill_cx) + infcx.make_canonicalized_query_response( + canonical_inference_vars, + result, + &mut *fulfill_cx + ) }, ) } diff --git a/src/librustc_traits/type_op.rs b/src/librustc_traits/type_op.rs index 29154cffa1d..d38ce3478d9 100644 --- a/src/librustc_traits/type_op.rs +++ b/src/librustc_traits/type_op.rs @@ -11,7 +11,7 @@ use rustc::traits::query::type_op::prove_predicate::ProvePredicate; use rustc::traits::query::type_op::subtype::Subtype; use rustc::traits::query::{Fallible, NoSolution}; use rustc::traits::{ - FulfillmentContext, Normalized, Obligation, ObligationCause, TraitEngine, TraitEngineExt, + Normalized, Obligation, ObligationCause, TraitEngine, TraitEngineExt, }; use rustc::ty::query::Providers; use rustc::ty::subst::{Kind, Subst, UserSelfTy, UserSubsts}; @@ -75,7 +75,7 @@ fn type_op_ascribe_user_type<'tcx>( struct AscribeUserTypeCx<'me, 'gcx: 'tcx, 'tcx: 'me> { infcx: &'me InferCtxt<'me, 'gcx, 'tcx>, param_env: ParamEnv<'tcx>, - fulfill_cx: &'me mut FulfillmentContext<'tcx>, + fulfill_cx: &'me mut dyn TraitEngine<'tcx>, } impl AscribeUserTypeCx<'me, 'gcx, 'tcx> { @@ -231,7 +231,7 @@ fn type_op_eq<'tcx>( fn type_op_normalize<T>( infcx: &InferCtxt<'_, 'gcx, 'tcx>, - fulfill_cx: &mut FulfillmentContext<'tcx>, + fulfill_cx: &mut dyn TraitEngine<'tcx>, key: ParamEnvAnd<'tcx, Normalize<T>>, ) -> Fallible<T> where |
