.subst(self.tcx, substs);
if self.normalize {
- // NOTE: this flag is currently *always* set to false, we are slowly folding
- // normalization into this trait and will come back to remove this in the near
- // future.
-
- // code from NormalizingClosureTyper:
- // the substitutions in `substs` are already monomorphized,
- // but we still must normalize associated types
- // normalize_associated_type(self.param_env.tcx, &closure_ty)
normalize_associated_type(&self.tcx, &closure_ty)
- // panic!("see issue 26597: fufillment context refactor must occur")
} else {
closure_ty
}
let result = ty::ctxt::closure_upvars(self, def_id, substs);
if self.normalize {
- // NOTE: this flag is currently *always* set to false, we are slowly folding
- // normalization into this trait and will come back to remove this in the near
- // future.
-
- // code from NormalizingClosureTyper:
- // the substitutions in `substs` are already monomorphized,
- // but we still must normalize associated types
- // monomorphize::normalize_associated_type(self.param_env.tcx, &result)
- // panic!("see issue 26597: fufillment context refactor must occur")
normalize_associated_type(&self.tcx, &result)
} else {
result
#[derive(Copy, Clone)]
pub struct MemCategorizationContext<'t, 'a: 't, 'tcx : 'a> {
pub typer: &'t infer::InferCtxt<'a, 'tcx>,
- // pub monomorphize: bool,
}
pub type McResult<T> = Result<T, ()>;
debug!("normalize_param_env(value={:?})", value);
let mut selcx = &mut SelectionContext::new(infcx);
- // FIXME (@jroesch): I'm not sure if this is a bug or not, needs
- // further investigation. It appears that by reusing the fulfillment_cx
- // here we incur more obligations and later trip an asssertion on
- // regionck.rs line 337. The two possibilities I see is that
- // normalization is not actually fully happening and we
- // have a bug else where or that we are adding a duplicate
- // bound into the list causing its size to change. I think
- // we should probably land this refactor and then come
+ // FIXME (@jroesch):
+ // I'm not sure if this is a bug or not, needs further investigation.
+ // It appears that by reusing the fulfillment_cx here we incur more
+ // obligations and later trip an asssertion on regionck.rs line 337.
+ //
+ // The two possibilities I see is:
+ // - normalization is not actually fully happening and we
+ // have a bug else where
+ // - we are adding a duplicate bound into the list causing
+ // its size to change.
+ //
+ // I think we should probably land this refactor and then come
// back to this is a follow-up patch.
let mut fulfill_cx = FulfillmentContext::new(false);
- // let mut fulfill_cx = infcx.fulfillment_cx.borrow_mut();
let Normalized { value: normalized_value, obligations } =
project::normalize(selcx, cause, value);
for obligation in obligations {
fulfill_cx.register_predicate_obligation(selcx.infcx(), obligation);
}
+
try!(fulfill_cx.select_all_or_error(infcx));
let resolved_value = infcx.resolve_type_vars_if_possible(&normalized_value);
debug!("normalize_param_env: resolved_value={:?}", resolved_value);
use syntax::ast;
use syntax::codemap::Span;
-//FIME(@jroesch): Refactor this
+//FIXME(@jroesch): Ideally we should be able to drop the fulfillment_cx argument.
pub fn normalize_associated_types_in<'a,'tcx,T>(infcx: &InferCtxt<'a,'tcx>,
fulfillment_cx: &mut FulfillmentContext<'tcx>,
span: Span,
// one is never copied into the tcx: it is only used by regionck.
fn_sig_map: RefCell<NodeMap<Vec<Ty<'tcx>>>>,
- // Tracks trait obligations incurred during this function body.
- // fulfillment_cx: RefCell<traits::FulfillmentContext<'tcx>>,
-
// When we process a call like `c()` where `c` is a closure type,
// we may not have decided yet whether `c` is a `Fn`, `FnMut`, or
// `FnOnce` closure. In that case, we defer full resolution of the
pub fn check_coherence(crate_context: &CrateCtxt) {
CoherenceChecker {
crate_context: crate_context,
- // XXXJAREDXXX: not sure if the bool is right here?
inference_context: new_infer_ctxt(crate_context.tcx, &crate_context.tcx.tables, None, true),
inherent_impls: RefCell::new(FnvHashMap()),
}.check(crate_context.tcx.map.krate());