diff --git a/src/librustc/lib.rs b/src/librustc/lib.rs index cdc27244dde..122171e4691 100644 --- a/src/librustc/lib.rs +++ b/src/librustc/lib.rs @@ -28,6 +28,7 @@ #![feature(rustc_diagnostic_macros)] #![feature(unboxed_closures)] #![feature(old_orphan_check)] +#![feature(associated_types)] extern crate arena; extern crate flate; diff --git a/src/librustc/metadata/encoder.rs b/src/librustc/metadata/encoder.rs index 10383b901f3..17663a127a8 100644 --- a/src/librustc/metadata/encoder.rs +++ b/src/librustc/metadata/encoder.rs @@ -364,7 +364,7 @@ fn encode_enum_variant_info(ecx: &EncodeContext, } } -fn encode_path>(rbml_w: &mut Encoder, path: PI) { +fn encode_path>(rbml_w: &mut Encoder, path: PI) { let path = path.collect::>(); rbml_w.start_tag(tag_path); rbml_w.wr_tagged_u32(tag_path_len, path.len() as u32); diff --git a/src/librustc/middle/cfg/construct.rs b/src/librustc/middle/cfg/construct.rs index 92aa70548c8..a7b28a6323e 100644 --- a/src/librustc/middle/cfg/construct.rs +++ b/src/librustc/middle/cfg/construct.rs @@ -150,7 +150,7 @@ impl<'a, 'tcx> CFGBuilder<'a, 'tcx> { } } - fn pats_all<'b, I: Iterator<&'b P>>(&mut self, + fn pats_all<'b, I: Iterator>>(&mut self, pats: I, pred: CFGIndex) -> CFGIndex { //! Handles case where all of the patterns must match. @@ -501,7 +501,7 @@ impl<'a, 'tcx> CFGBuilder<'a, 'tcx> { } } - fn call<'b, I: Iterator<&'b ast::Expr>>(&mut self, + fn call<'b, I: Iterator>(&mut self, call_expr: &ast::Expr, pred: CFGIndex, func_or_rcvr: &ast::Expr, @@ -521,7 +521,7 @@ impl<'a, 'tcx> CFGBuilder<'a, 'tcx> { } } - fn exprs<'b, I: Iterator<&'b ast::Expr>>(&mut self, + fn exprs<'b, I: Iterator>(&mut self, exprs: I, pred: CFGIndex) -> CFGIndex { //! Constructs graph for `exprs` evaluated in order @@ -535,7 +535,7 @@ impl<'a, 'tcx> CFGBuilder<'a, 'tcx> { opt_expr.iter().fold(pred, |p, e| self.expr(&**e, p)) } - fn straightline<'b, I: Iterator<&'b ast::Expr>>(&mut self, + fn straightline<'b, I: Iterator>(&mut self, expr: &ast::Expr, pred: CFGIndex, subexprs: I) -> CFGIndex { diff --git a/src/librustc/middle/check_match.rs b/src/librustc/middle/check_match.rs index d16224ec5b8..4151f5fa627 100644 --- a/src/librustc/middle/check_match.rs +++ b/src/librustc/middle/check_match.rs @@ -92,7 +92,7 @@ impl<'a> fmt::Show for Matrix<'a> { } impl<'a> FromIterator> for Matrix<'a> { - fn from_iter>>(iterator: T) -> Matrix<'a> { + fn from_iter>>(iterator: T) -> Matrix<'a> { Matrix(iterator.collect()) } } diff --git a/src/librustc/middle/const_eval.rs b/src/librustc/middle/const_eval.rs index 9fc5cb03353..96b2a62326b 100644 --- a/src/librustc/middle/const_eval.rs +++ b/src/librustc/middle/const_eval.rs @@ -81,7 +81,7 @@ pub fn join(a: constness, b: constness) -> constness { } } -pub fn join_all>(cs: It) -> constness { +pub fn join_all>(cs: It) -> constness { cs.fold(integral_const, |a, b| join(a, b)) } diff --git a/src/librustc/middle/graph.rs b/src/librustc/middle/graph.rs index da00d737b47..e8efdda3888 100644 --- a/src/librustc/middle/graph.rs +++ b/src/librustc/middle/graph.rs @@ -305,7 +305,9 @@ pub struct DepthFirstTraversal<'g, N:'g, E:'g> { visited: BitvSet } -impl<'g, N, E> Iterator<&'g N> for DepthFirstTraversal<'g, N, E> { +impl<'g, N, E> Iterator for DepthFirstTraversal<'g, N, E> { + type Item = &'g N; + fn next(&mut self) -> Option<&'g N> { while let Some(idx) = self.stack.pop() { if !self.visited.insert(idx.node_id()) { diff --git a/src/librustc/middle/subst.rs b/src/librustc/middle/subst.rs index 97e74b9f6bb..e7971a82119 100644 --- a/src/librustc/middle/subst.rs +++ b/src/librustc/middle/subst.rs @@ -494,7 +494,9 @@ impl<'a,T> EnumeratedItems<'a,T> { } } -impl<'a,T> Iterator<(ParamSpace, uint, &'a T)> for EnumeratedItems<'a,T> { +impl<'a,T> Iterator for EnumeratedItems<'a,T> { + type Item = (ParamSpace, uint, &'a T); + fn next(&mut self) -> Option<(ParamSpace, uint, &'a T)> { let spaces = ParamSpace::all(); if self.space_index < spaces.len() { diff --git a/src/librustc/middle/traits/select.rs b/src/librustc/middle/traits/select.rs index d09f2a250b0..bd901ff431a 100644 --- a/src/librustc/middle/traits/select.rs +++ b/src/librustc/middle/traits/select.rs @@ -297,7 +297,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> { stack: Option<&TraitObligationStack<'o, 'tcx>>, mut predicates: I) -> EvaluationResult<'tcx> - where I : Iterator<&'a PredicateObligation<'tcx>>, 'tcx:'a + where I : Iterator>, 'tcx:'a { let mut result = EvaluatedToOk; for obligation in predicates { @@ -2315,9 +2315,9 @@ impl<'o, 'tcx> TraitObligationStack<'o, 'tcx> { } } -impl<'o, 'tcx> Iterator<&'o TraitObligationStack<'o,'tcx>> - for Option<&'o TraitObligationStack<'o, 'tcx>> -{ +impl<'o, 'tcx> Iterator for Option<&'o TraitObligationStack<'o, 'tcx>> { + type Item = &'o TraitObligationStack<'o,'tcx>; + fn next(&mut self) -> Option<&'o TraitObligationStack<'o, 'tcx>> { match *self { Some(o) => { diff --git a/src/librustc/middle/traits/util.rs b/src/librustc/middle/traits/util.rs index 41a59d6a5d8..e4578f74763 100644 --- a/src/librustc/middle/traits/util.rs +++ b/src/librustc/middle/traits/util.rs @@ -133,7 +133,9 @@ impl<'cx, 'tcx> Elaborator<'cx, 'tcx> { } } -impl<'cx, 'tcx> Iterator> for Elaborator<'cx, 'tcx> { +impl<'cx, 'tcx> Iterator for Elaborator<'cx, 'tcx> { + type Item = ty::Predicate<'tcx>; + fn next(&mut self) -> Option> { loop { // Extract next item from top-most stack frame, if any. @@ -197,7 +199,9 @@ pub fn transitive_bounds<'cx, 'tcx>(tcx: &'cx ty::ctxt<'tcx>, elaborate_trait_refs(tcx, bounds).filter_to_traits() } -impl<'cx, 'tcx> Iterator> for Supertraits<'cx, 'tcx> { +impl<'cx, 'tcx> Iterator for Supertraits<'cx, 'tcx> { + type Item = ty::PolyTraitRef<'tcx>; + fn next(&mut self) -> Option> { loop { match self.elaborator.next() { diff --git a/src/librustc/middle/ty.rs b/src/librustc/middle/ty.rs index 999bc23c270..f786ef8afee 100644 --- a/src/librustc/middle/ty.rs +++ b/src/librustc/middle/ty.rs @@ -3716,10 +3716,10 @@ pub fn is_type_representable<'tcx>(cx: &ctxt<'tcx>, sp: Span, ty: Ty<'tcx>) -> Representability { // Iterate until something non-representable is found - fn find_nonrepresentable<'tcx, It: Iterator>>(cx: &ctxt<'tcx>, sp: Span, - seen: &mut Vec>, - iter: It) - -> Representability { + fn find_nonrepresentable<'tcx, It: Iterator>>(cx: &ctxt<'tcx>, sp: Span, + seen: &mut Vec>, + iter: It) + -> Representability { iter.fold(Representable, |r, ty| cmp::max(r, is_type_structurally_recursive(cx, sp, seen, ty))) } diff --git a/src/librustc/middle/ty_walk.rs b/src/librustc/middle/ty_walk.rs index 406ebf4bc38..12df36c10fc 100644 --- a/src/librustc/middle/ty_walk.rs +++ b/src/librustc/middle/ty_walk.rs @@ -94,7 +94,9 @@ impl<'tcx> TypeWalker<'tcx> { } } -impl<'tcx> Iterator> for TypeWalker<'tcx> { +impl<'tcx> Iterator for TypeWalker<'tcx> { + type Item = Ty<'tcx>; + fn next(&mut self) -> Option> { debug!("next(): stack={}", self.stack); match self.stack.pop() { diff --git a/src/librustc/session/search_paths.rs b/src/librustc/session/search_paths.rs index 56b4cae2e43..14ea2d3d33a 100644 --- a/src/librustc/session/search_paths.rs +++ b/src/librustc/session/search_paths.rs @@ -53,7 +53,9 @@ impl SearchPaths { } } -impl<'a> Iterator<&'a Path> for Iter<'a> { +impl<'a> Iterator for Iter<'a> { + type Item = &'a Path; + fn next(&mut self) -> Option<&'a Path> { loop { match self.iter.next() {