about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/librustc/middle/traits/select.rs9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/librustc/middle/traits/select.rs b/src/librustc/middle/traits/select.rs
index 64931b49435..305528a9af8 100644
--- a/src/librustc/middle/traits/select.rs
+++ b/src/librustc/middle/traits/select.rs
@@ -109,6 +109,7 @@ enum BuiltinBoundConditions {
     AmbiguousBuiltin
 }
 
+#[deriving(Show)]
 enum EvaluationResult {
     EvaluatedToOk,
     EvaluatedToErr,
@@ -246,7 +247,9 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
                obligation.repr(self.tcx()));
 
         let stack = self.push_stack(previous_stack.map(|x| x), obligation);
-        self.evaluate_stack(&stack)
+        let result = self.evaluate_stack(&stack);
+        debug!("result: {}", result);
+        result
     }
 
     fn evaluate_stack(&mut self,
@@ -259,6 +262,8 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
         // that does provide an impl.
         let input_types = &stack.skol_trait_ref.substs.types;
         if input_types.iter().any(|&t| ty::type_is_skolemized(t)) {
+            debug!("evaluate_stack({}) --> unbound argument, must be ambiguous",
+                   stack.skol_trait_ref.repr(self.tcx()));
             return EvaluatedToAmbig;
         }
 
@@ -286,6 +291,8 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
             .skip(1) // skip top-most frame
             .any(|prev| stack.skol_trait_ref == prev.skol_trait_ref)
         {
+            debug!("evaluate_stack({}) --> recursive",
+                   stack.skol_trait_ref.repr(self.tcx()));
             return EvaluatedToOk;
         }