]> git.lizzy.rs Git - rust.git/blobdiff - src/librustc/traits/mod.rs
add some comments to `Obligation`
[rust.git] / src / librustc / traits / mod.rs
index c1ffc10c3c0f0f65e51b1904915c3d8b91c1e0e5..027ad4174bd1526076cf353f76b6727eb081df08 100644 (file)
@@ -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>>;