diff --git a/src/libcore/iter-trait.rs b/src/libcore/iter-trait.rs
index 001e7f5648d..644a0fd76b7 100644
--- a/src/libcore/iter-trait.rs
+++ b/src/libcore/iter-trait.rs
@@ -40,6 +40,14 @@ impl IMPL_T: iter::ExtendedIter {
pure fn position(&self, f: fn(&A) -> bool) -> Option {
iter::position(self, f)
}
+ pure fn map_to_vec(&self, op: fn(&A) -> B) -> ~[B] {
+ iter::map_to_vec(self, op)
+ }
+ pure fn flat_map_to_vec>(&self, op: fn(&A) -> IB)
+ -> ~[B] {
+ iter::flat_map_to_vec(self, op)
+ }
+
}
impl IMPL_T: iter::EqIter {
@@ -48,19 +56,11 @@ impl IMPL_T: iter::EqIter {
}
impl IMPL_T: iter::CopyableIter {
- pure fn filter_to_vec(&self, pred: fn(a: A) -> bool) -> ~[A] {
+ pure fn filter_to_vec(&self, pred: fn(&A) -> bool) -> ~[A] {
iter::filter_to_vec(self, pred)
}
- pure fn map_to_vec(&self, op: fn(v: A) -> B) -> ~[B] {
- iter::map_to_vec(self, op)
- }
pure fn to_vec(&self) -> ~[A] { iter::to_vec(self) }
-
- pure fn flat_map_to_vec>(&self, op: fn(a: A) -> IB)
- -> ~[B] {
- iter::flat_map_to_vec(self, op)
- }
- pure fn find(&self, f: fn(A) -> bool) -> Option {
+ pure fn find(&self, f: fn(&A) -> bool) -> Option {
iter::find(self, f)
}
}
diff --git a/src/libcore/iter.rs b/src/libcore/iter.rs
index 2933259a18e..a9b3401aa6f 100644
--- a/src/libcore/iter.rs
+++ b/src/libcore/iter.rs
@@ -33,6 +33,9 @@ pub trait ExtendedIter {
pure fn any(&self, blk: fn(&A) -> bool) -> bool;
pure fn foldl(&self, b0: B, blk: fn(&B, &A) -> B) -> B;
pure fn position(&self, f: fn(&A) -> bool) -> Option;
+ pure fn map_to_vec(&self, op: fn(&A) -> B) -> ~[B];
+ pure fn flat_map_to_vec>(&self, op: fn(&A) -> IB)
+ -> ~[B];
}
pub trait EqIter {
@@ -45,12 +48,9 @@ pub trait Times {
}
pub trait CopyableIter {
- pure fn filter_to_vec(&self, pred: fn(a: A) -> bool) -> ~[A];
- pure fn map_to_vec(&self, op: fn(v: A) -> B) -> ~[B];
- pure fn flat_map_to_vec>(&self, op: fn(A) -> IB)
- -> ~[B];
+ pure fn filter_to_vec(&self, pred: fn(&A) -> bool) -> ~[A];
pure fn to_vec(&self) -> ~[A];
- pure fn find(&self, p: fn(A) -> bool) -> Option;
+ pure fn find(&self, p: fn(&A) -> bool) -> Option;
}
pub trait CopyableOrderedIter {
@@ -82,11 +82,11 @@ pub trait Buildable {
* onto the sequence being constructed.
*/
static pure fn build_sized(size: uint,
- builder: fn(push: pure fn(v: A))) -> self;
+ builder: fn(push: pure fn(A))) -> self;
}
pub pure fn eachi>(self: &IA,
- blk: fn(uint, v: &A) -> bool) {
+ blk: fn(uint, &A) -> bool) {
let mut i = 0;
for self.each |a| {
if !blk(i, a) { break; }
@@ -111,30 +111,30 @@ pub pure fn any>(self: &IA,
}
pub pure fn filter_to_vec>(
- self: &IA, prd: fn(a: A) -> bool) -> ~[A] {
+ self: &IA, prd: fn(&A) -> bool) -> ~[A] {
do vec::build_sized_opt(self.size_hint()) |push| {
for self.each |a| {
- if prd(*a) { push(*a); }
+ if prd(a) { push(*a); }
}
}
}
-pub pure fn map_to_vec>(self: &IA,
- op: fn(v: A) -> B)
+pub pure fn map_to_vec>(self: &IA,
+ op: fn(&A) -> B)
-> ~[B] {
do vec::build_sized_opt(self.size_hint()) |push| {
for self.each |a| {
- push(op(*a));
+ push(op(a));
}
}
}
-pub pure fn flat_map_to_vec,IB:BaseIter>(
- self: &IA, op: fn(a: A) -> IB) -> ~[B] {
+pub pure fn flat_map_to_vec,IB:BaseIter>(
+ self: &IA, op: fn(&A) -> IB) -> ~[B] {
do vec::build |push| {
for self.each |a| {
- for op(*a).each |b| {
- push(*b);
+ for op(a).each |&b| {
+ push(b);
}
}
}
@@ -223,9 +223,9 @@ pub pure fn max>(self: &IA) -> A {
}
pub pure fn find>(self: &IA,
- f: fn(A) -> bool) -> Option {
+ f: fn(&A) -> bool) -> Option {
for self.each |i| {
- if f(*i) { return Some(*i) }
+ if f(i) { return Some(*i) }
}
return None;
}
@@ -243,7 +243,7 @@ pub pure fn find>(self: &IA,
* onto the sequence being constructed.
*/
#[inline(always)]
-pub pure fn build>(builder: fn(push: pure fn(v: A)))
+pub pure fn build>(builder: fn(push: pure fn(A)))
-> B {
Buildable::build_sized(4, builder)
}
@@ -264,7 +264,7 @@ pub pure fn build>(builder: fn(push: pure fn(v: A)))
#[inline(always)]
pub pure fn build_sized_opt>(
size: Option,
- builder: fn(push: pure fn(v: A))) -> B {
+ builder: fn(push: pure fn(A))) -> B {
Buildable::build_sized(size.get_default(4), builder)
}
diff --git a/src/libcore/vec.rs b/src/libcore/vec.rs
index 912f9b1bf1b..c091f48728f 100644
--- a/src/libcore/vec.rs
+++ b/src/libcore/vec.rs
@@ -2040,6 +2040,13 @@ impl &[A]: iter::ExtendedIter {
pub pure fn position(&self, f: fn(&A) -> bool) -> Option {
iter::position(self, f)
}
+ pure fn map_to_vec(&self, op: fn(&A) -> B) -> ~[B] {
+ iter::map_to_vec(self, op)
+ }
+ pure fn flat_map_to_vec>(&self, op: fn(&A) -> IB)
+ -> ~[B] {
+ iter::flat_map_to_vec(self, op)
+ }
}
impl &[A]: iter::EqIter {
@@ -2048,20 +2055,11 @@ impl &[A]: iter::EqIter {
}
impl &[A]: iter::CopyableIter {
- pure fn filter_to_vec(&self, pred: fn(a: A) -> bool) -> ~[A] {
+ pure fn filter_to_vec(&self, pred: fn(&A) -> bool) -> ~[A] {
iter::filter_to_vec(self, pred)
}
- pure fn map_to_vec(&self, op: fn(v: A) -> B) -> ~[B] {
- iter::map_to_vec(self, op)
- }
pure fn to_vec(&self) -> ~[A] { iter::to_vec(self) }
-
- pure fn flat_map_to_vec>(&self, op: fn(A) -> IB)
- -> ~[B] {
- iter::flat_map_to_vec(self, op)
- }
-
- pub pure fn find(&self, f: fn(A) -> bool) -> Option {
+ pub pure fn find(&self, f: fn(&A) -> bool) -> Option {
iter::find(self, f)
}
}
diff --git a/src/librustc/metadata/creader.rs b/src/librustc/metadata/creader.rs
index bebddec94d3..e9b820d30db 100644
--- a/src/librustc/metadata/creader.rs
+++ b/src/librustc/metadata/creader.rs
@@ -70,7 +70,7 @@ fn warn_if_multiple_versions(e: env, diag: span_handler,
if crate_cache.len() != 0u {
let name = loader::crate_name_from_metas(*crate_cache.last().metas);
let (matches, non_matches) =
- partition(crate_cache.map_to_vec(|entry| {
+ partition(crate_cache.map_to_vec(|&entry| {
let othername = loader::crate_name_from_metas(*entry.metas);
if name == othername {
Left(entry)
diff --git a/src/librustc/middle/typeck/check/method.rs b/src/librustc/middle/typeck/check/method.rs
index c61ad39e333..765bf0cfdff 100644
--- a/src/librustc/middle/typeck/check/method.rs
+++ b/src/librustc/middle/typeck/check/method.rs
@@ -861,7 +861,7 @@ impl LookupContext {
-> Option
{
let relevant_candidates =
- candidates.filter_to_vec(|c| self.is_relevant(self_ty, &c));
+ candidates.filter_to_vec(|c| self.is_relevant(self_ty, c));
let relevant_candidates = self.merge_candidates(relevant_candidates);
diff --git a/src/librustdoc/attr_parser.rs b/src/librustdoc/attr_parser.rs
index 7ce4ef4f901..1a46b924147 100644
--- a/src/librustdoc/attr_parser.rs
+++ b/src/librustdoc/attr_parser.rs
@@ -115,7 +115,7 @@ fn parse_desc_should_parse_simple_doc_attributes() {
pub fn parse_hidden(+attrs: ~[ast::attribute]) -> bool {
do doc_metas(attrs).find |meta| {
- match attr::get_meta_item_list(meta) {
+ match attr::get_meta_item_list(*meta) {
Some(metas) => {
let hiddens = attr::find_meta_items_by_name(metas, ~"hidden");
vec::is_not_empty(hiddens)
diff --git a/src/libsyntax/ext/pipes/proto.rs b/src/libsyntax/ext/pipes/proto.rs
index 76757d027a5..b00a2aab69f 100644
--- a/src/libsyntax/ext/pipes/proto.rs
+++ b/src/libsyntax/ext/pipes/proto.rs
@@ -218,8 +218,8 @@ fn visit>(
proto: protocol, visitor: V) -> Tproto {
// the copy keywords prevent recursive use of dvec
- let states = do (copy proto.states).map_to_vec |s| {
- let messages = do (copy s.messages).map_to_vec |m| {
+ let states = do (copy proto.states).map_to_vec |&s| {
+ let messages = do (copy s.messages).map_to_vec |&m| {
let message(name, span, tys, this, next) = m;
visitor.visit_message(name, span, tys, this, next)
};
diff --git a/src/test/run-pass/issue-2611.rs b/src/test/run-pass/issue-2611.rs
index eb5f54abe8f..0a8bd250bb5 100644
--- a/src/test/run-pass/issue-2611.rs
+++ b/src/test/run-pass/issue-2611.rs
@@ -8,17 +8,14 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
-// xfail-fast
-#[legacy_modes];
-
use iter::BaseIter;
trait FlatMapToVec {
- fn flat_map_to_vec>(op: fn(+a: A) -> IB) -> ~[B];
+ fn flat_map_to_vec>(op: fn(&A) -> IB) -> ~[B];
}
impl BaseIter: FlatMapToVec {
- fn flat_map_to_vec>(op: fn(+a: A) -> IB) -> ~[B] {
+ fn flat_map_to_vec>(op: fn(&A) -> IB) -> ~[B] {
iter::flat_map_to_vec(&self, op)
}
}
diff --git a/src/test/run-pass/iter-flat-map-to-vec.rs b/src/test/run-pass/iter-flat-map-to-vec.rs
index d95dac1e092..2177066a033 100644
--- a/src/test/run-pass/iter-flat-map-to-vec.rs
+++ b/src/test/run-pass/iter-flat-map-to-vec.rs
@@ -9,10 +9,9 @@
// except according to those terms.
// xfail-test -- flat_map_to_vec currently disable
+fn repeat(x: &uint) -> ~[uint] { ~[x, x] }
-fn repeat(&&x: uint) -> ~[uint] { ~[x, x] }
-
-fn incd_if_even(&&x: uint) -> option {
+fn incd_if_even(x: &uint) -> option {
if (x % 2u) == 0u {some(x + 1u)} else {none}
}
@@ -28,4 +27,4 @@ fn main() {
assert none.flat_map_to_vec(incd_if_even) == ~[];
assert some(1u).flat_map_to_vec(incd_if_even) == ~[];
assert some(2u).flat_map_to_vec(incd_if_even) == ~[3u];
-}
\ No newline at end of file
+}