]> git.lizzy.rs Git - rust.git/commitdiff
Added some comments, made `add_bounds` private.
authorNiko Matsakis <niko@alum.mit.edu>
Wed, 8 May 2019 19:58:20 +0000 (15:58 -0400)
committerAlexander Regueiro <alexreg@me.com>
Wed, 5 Jun 2019 20:09:27 +0000 (21:09 +0100)
src/librustc_typeck/astconv.rs

index e37ad77b086fdb5626126fac9278368087d0321a..fe17d902c617c8c78f7ed7f8453c95a29a4e9092 100644 (file)
@@ -699,6 +699,15 @@ fn create_substs_for_ast_path<'a>(&self,
             },
         );
 
+        // Convert associated-type bindings or constraints into a separate vector.
+        // Example: Given this:
+        //
+        //     T: Iterator<Item = u32>
+        //
+        // The `T` is passed in as a self-type; the `Item = u32` is
+        // not a "type parameter" of the `Iterator` trait, but rather
+        // a restriction on `<T as Iterator>::Item`, so it is passed
+        // back separately.
         let assoc_bindings = generic_args.bindings.iter()
             .map(|binding| {
                 let kind = if let hir::TyKind::AssocTyExistential(ref bounds) = binding.ty.node {
@@ -899,7 +908,7 @@ pub fn is_unsized(&self, ast_bounds: &[hir::GenericBound], span: Span) -> bool {
         true
     }
 
-    pub fn add_bounds(&self,
+    fn add_bounds(&self,
         param_ty: Ty<'tcx>,
         ast_bounds: &[hir::GenericBound],
         bounds: &mut Bounds<'tcx>,
@@ -1065,6 +1074,10 @@ fn add_predicates_for_ast_type_binding(
 
         match binding.kind {
             ConvertedBindingKind::Equality(ref ty) => {
+                // "Desugar" a constraint like `T: Iterator<Item = u32>` this to
+                // the "projection predicate" for:
+                //
+                // `<T as Iterator>::Item = u32`
                 bounds.projection_bounds.push((candidate.map_bound(|trait_ref| {
                     ty::ProjectionPredicate {
                         projection_ty: ty::ProjectionTy::from_ref_and_name(