From: Niko Matsakis Date: Sat, 15 Jul 2017 10:47:30 +0000 (-0400) Subject: add some comments to `Obligation` X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=e7efce23618adcc9c960e1518d00883da8a8c444;hp=803bd761278e6e06baabfd5aa1aa15e75c4a16a4;p=rust.git add some comments to `Obligation` --- diff --git a/src/librustc/traits/mod.rs b/src/librustc/traits/mod.rs index c1ffc10c3c0..027ad4174bd 100644 --- a/src/librustc/traits/mod.rs +++ b/src/librustc/traits/mod.rs @@ -77,10 +77,21 @@ pub enum IntercrateMode { /// scope. The eventual result is usually a `Selection` (defined below). #[derive(Clone, PartialEq, Eq, Hash)] pub struct Obligation<'tcx, T> { + /// Why do we have to prove this thing? pub cause: ObligationCause<'tcx>, + + /// In which environment should we prove this thing? pub param_env: ty::ParamEnv<'tcx>, - pub recursion_depth: usize, + + /// What are we trying to prove? pub predicate: T, + + /// If we started proving this as a result of trying to prove + /// something else, track the total depth to ensure termination. + /// If this goes over a certain threshold, we abort compilation -- + /// in such cases, we can not say whether or not the predicate + /// holds for certain. Stupid halting problem. Such a drag. + pub recursion_depth: usize, } pub type PredicateObligation<'tcx> = Obligation<'tcx, ty::Predicate<'tcx>>;