Skip to content

Commit de0d696

Browse files
committed
Remove vec::{filter, filtered, filter_map, filter_mapped}, replaced by iterators.
1 parent eee6775 commit de0d696

File tree

20 files changed

+131
-418
lines changed

20 files changed

+131
-418
lines changed

src/libextra/test.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -523,7 +523,7 @@ pub fn filter_tests(
523523
} else { return option::None; }
524524
}
525525
526-
vec::filter_map(filtered, |x| filter_fn(x, filter_str))
526+
filtered.consume_iter().filter_map(|x| filter_fn(x, filter_str)).collect()
527527
};
528528
529529
// Maybe pull out the ignored test and unignore them
@@ -541,7 +541,7 @@ pub fn filter_tests(
541541
None
542542
}
543543
};
544-
vec::filter_map(filtered, |x| filter(x))
544+
filtered.consume_iter().filter_map(|x| filter(x)).collect()
545545
};
546546
547547
// Sort the tests alphabetically
@@ -720,9 +720,9 @@ impl BenchHarness {
720720
// Eliminate outliers
721721
let med = samples.median();
722722
let mad = samples.median_abs_dev();
723-
let samples = do vec::filter(samples) |f| {
723+
let samples = do samples.consume_iter().filter |f| {
724724
num::abs(*f - med) <= 3.0 * mad
725-
};
725+
}.collect::<~[f64]>();
726726
727727
debug!("%u samples, median %f, MAD=%f, %u survived filter",
728728
n_samples, med as float, mad as float,

src/librustc/front/config.rs

Lines changed: 26 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010

1111

1212
use std::option;
13-
use std::vec;
1413
use syntax::{ast, fold, attr};
1514

1615
type in_cfg_pred = @fn(attrs: ~[ast::attribute]) -> bool;
@@ -61,13 +60,15 @@ fn filter_view_item(cx: @Context, view_item: @ast::view_item
6160
}
6261

6362
fn fold_mod(cx: @Context, m: &ast::_mod, fld: @fold::ast_fold) -> ast::_mod {
64-
let filtered_items =
65-
m.items.filter_mapped(|a| filter_item(cx, *a));
66-
let filtered_view_items =
67-
m.view_items.filter_mapped(|a| filter_view_item(cx, *a));
63+
let filtered_items = do m.items.iter().filter_map |a| {
64+
filter_item(cx, *a).chain(|x| fld.fold_item(x))
65+
}.collect();
66+
let filtered_view_items = do m.view_items.iter().filter_map |a| {
67+
filter_view_item(cx, *a).map(|x| fld.fold_view_item(*x))
68+
}.collect();
6869
ast::_mod {
69-
view_items: filtered_view_items.map(|x| fld.fold_view_item(*x)),
70-
items: vec::filter_map(filtered_items, |x| fld.fold_item(x))
70+
view_items: filtered_view_items,
71+
items: filtered_items
7172
}
7273
}
7374

@@ -83,14 +84,14 @@ fn fold_foreign_mod(
8384
nm: &ast::foreign_mod,
8485
fld: @fold::ast_fold
8586
) -> ast::foreign_mod {
86-
let filtered_items =
87-
nm.items.filter_mapped(|a| filter_foreign_item(cx, *a));
88-
let filtered_view_items =
89-
nm.view_items.filter_mapped(|a| filter_view_item(cx, *a));
87+
let filtered_items = nm.items.iter().filter_map(|a| filter_foreign_item(cx, *a)).collect();
88+
let filtered_view_items = do nm.view_items.iter().filter_map |a| {
89+
filter_view_item(cx, *a).map(|x| fld.fold_view_item(*x))
90+
}.collect();
9091
ast::foreign_mod {
9192
sort: nm.sort,
9293
abis: nm.abis,
93-
view_items: filtered_view_items.iter().transform(|x| fld.fold_view_item(*x)).collect(),
94+
view_items: filtered_view_items,
9495
items: filtered_items
9596
}
9697
}
@@ -99,11 +100,13 @@ fn fold_item_underscore(cx: @Context, item: &ast::item_,
99100
fld: @fold::ast_fold) -> ast::item_ {
100101
let item = match *item {
101102
ast::item_impl(ref a, b, c, ref methods) => {
102-
let methods = methods.filtered(|m| method_in_cfg(cx, *m) );
103+
let methods = methods.iter().filter(|m| method_in_cfg(cx, **m))
104+
.transform(|x| *x).collect();
103105
ast::item_impl(/*bad*/ copy *a, b, c, methods)
104106
}
105107
ast::item_trait(ref a, ref b, ref methods) => {
106-
let methods = methods.filtered(|m| trait_method_in_cfg(cx, m) );
108+
let methods = methods.iter().filter(|m| trait_method_in_cfg(cx, *m) )
109+
.transform(|x| /* bad */copy *x).collect();
107110
ast::item_trait(/*bad*/copy *a, /*bad*/copy *b, methods)
108111
}
109112
ref item => /*bad*/ copy *item
@@ -134,19 +137,12 @@ fn fold_block(
134137
b: &ast::blk_,
135138
fld: @fold::ast_fold
136139
) -> ast::blk_ {
137-
let filtered_stmts =
138-
b.stmts.filter_mapped(|a| filter_stmt(cx, *a));
139-
let filtered_view_items =
140-
b.view_items.filter_mapped(|a| filter_view_item(cx, *a));
141-
let filtered_view_items =
142-
filtered_view_items.map(|x| fld.fold_view_item(*x));
143-
let mut resulting_stmts = ~[];
144-
for filtered_stmts.iter().advance |stmt| {
145-
match fld.fold_stmt(*stmt) {
146-
None => {}
147-
Some(stmt) => resulting_stmts.push(stmt),
148-
}
149-
}
140+
let resulting_stmts = do b.stmts.iter().filter_map |a| {
141+
filter_stmt(cx, *a).chain(|stmt| fld.fold_stmt(stmt))
142+
}.collect();
143+
let filtered_view_items = do b.view_items.iter().filter_map |a| {
144+
filter_view_item(cx, *a).map(|x| fld.fold_view_item(*x))
145+
}.collect();
150146
ast::blk_ {
151147
view_items: filtered_view_items,
152148
stmts: resulting_stmts,
@@ -193,7 +189,9 @@ pub fn metas_in_cfg(cfg: &[@ast::meta_item],
193189
// Pull the inner meta_items from the #[cfg(meta_item, ...)] attributes,
194190
// so we can match against them. This is the list of configurations for
195191
// which the item is valid
196-
let cfg_metas = vec::filter_map(cfg_metas, |i| attr::get_meta_item_list(i));
192+
let cfg_metas = cfg_metas.consume_iter()
193+
.filter_map(|i| attr::get_meta_item_list(i))
194+
.collect::<~[~[@ast::meta_item]]>();
197195

198196
if cfg_metas.iter().all(|c| c.is_empty()) { return true; }
199197

src/librustc/front/test.rs

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -109,9 +109,11 @@ fn fold_mod(cx: @mut TestCtxt,
109109

110110
fn nomain(cx: @mut TestCtxt, item: @ast::item) -> @ast::item {
111111
if !*cx.sess.building_library {
112-
@ast::item{attrs: item.attrs.filtered(|attr| {
113-
"main" != attr::get_attr_name(attr)
114-
}),.. copy *item}
112+
@ast::item{
113+
attrs: do item.attrs.iter().filter_map |attr| {
114+
if "main" != attr::get_attr_name(attr) {Some(*attr)} else {None}
115+
}.collect(),
116+
.. copy *item}
115117
} else { item }
116118
}
117119

@@ -229,10 +231,10 @@ fn is_ignored(cx: @mut TestCtxt, i: @ast::item) -> bool {
229231
let ignoreattrs = attr::find_attrs_by_name(i.attrs, "ignore");
230232
let ignoreitems = attr::attr_metas(ignoreattrs);
231233
return if !ignoreitems.is_empty() {
232-
let cfg_metas =
233-
vec::concat(
234-
vec::filter_map(ignoreitems,
235-
|i| attr::get_meta_item_list(i)));
234+
let cfg_metas = ignoreitems.consume_iter()
235+
.filter_map(|i| attr::get_meta_item_list(i))
236+
.collect::<~[~[@ast::meta_item]]>()
237+
.concat_vec();
236238
config::metas_in_cfg(/*bad*/copy cx.crate.node.config, cfg_metas)
237239
} else {
238240
false

src/librustc/middle/astencode.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -291,16 +291,16 @@ fn encode_ast(ebml_w: &mut writer::Encoder, item: ast::inlined_item) {
291291
// inlined items.
292292
fn simplify_ast(ii: &ast::inlined_item) -> ast::inlined_item {
293293
fn drop_nested_items(blk: &ast::blk_, fld: @fold::ast_fold) -> ast::blk_ {
294-
let stmts_sans_items = do blk.stmts.filtered |stmt| {
294+
let stmts_sans_items = do blk.stmts.iter().filter_map |stmt| {
295295
match stmt.node {
296296
ast::stmt_expr(_, _) | ast::stmt_semi(_, _) |
297-
ast::stmt_decl(@codemap::spanned { node: ast::decl_local(_),
298-
span: _}, _) => true,
299-
ast::stmt_decl(@codemap::spanned { node: ast::decl_item(_),
300-
span: _}, _) => false,
297+
ast::stmt_decl(@codemap::spanned { node: ast::decl_local(_), span: _}, _)
298+
=> Some(*stmt),
299+
ast::stmt_decl(@codemap::spanned { node: ast::decl_item(_), span: _}, _)
300+
=> None,
301301
ast::stmt_mac(*) => fail!("unexpanded macro in astencode")
302302
}
303-
};
303+
}.collect();
304304
let blk_sans_items = ast::blk_ {
305305
view_items: ~[], // I don't know if we need the view_items here,
306306
// but it doesn't break tests!

src/librustc/middle/check_match.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ pub fn check_expr(cx: @MatchCheckCtxt, ex: @expr, (s, v): ((), visit::vt<()>)) {
9595
}
9696
_ => { /* We assume only enum types can be uninhabited */ }
9797
}
98-
let arms = vec::concat(arms.filter_mapped(unguarded_pat));
98+
let arms = arms.iter().filter_map(unguarded_pat).collect::<~[~[@pat]]>().concat_vec();
9999
if arms.is_empty() {
100100
cx.tcx.sess.span_err(ex.span, "non-exhaustive patterns");
101101
} else {
@@ -265,7 +265,7 @@ pub fn is_useful(cx: &MatchCheckCtxt, m: &matrix, v: &[@pat]) -> useful {
265265
}
266266
Some(ref ctor) => {
267267
match is_useful(cx,
268-
&m.filter_mapped(|r| default(cx, *r)),
268+
&m.iter().filter_map(|r| default(cx, *r)).collect::<matrix>(),
269269
v.tail()) {
270270
useful_ => useful(left_ty, /*bad*/copy *ctor),
271271
ref u => (/*bad*/copy *u)
@@ -287,7 +287,7 @@ pub fn is_useful_specialized(cx: &MatchCheckCtxt,
287287
arity: uint,
288288
lty: ty::t)
289289
-> useful {
290-
let ms = m.filter_mapped(|r| specialize(cx, *r, &ctor, arity, lty));
290+
let ms = m.iter().filter_map(|r| specialize(cx, *r, &ctor, arity, lty)).collect::<matrix>();
291291
let could_be_useful = is_useful(
292292
cx, &ms, specialize(cx, v, &ctor, arity, lty).get());
293293
match could_be_useful {
@@ -397,14 +397,14 @@ pub fn missing_ctor(cx: &MatchCheckCtxt,
397397
ty::ty_unboxed_vec(*) | ty::ty_evec(*) => {
398398

399399
// Find the lengths and slices of all vector patterns.
400-
let vec_pat_lens = do m.filter_mapped |r| {
400+
let vec_pat_lens = do m.iter().filter_map |r| {
401401
match r[0].node {
402402
pat_vec(ref before, ref slice, ref after) => {
403403
Some((before.len() + after.len(), slice.is_some()))
404404
}
405405
_ => None
406406
}
407-
};
407+
}.collect::<~[(uint, bool)]>();
408408

409409
// Sort them by length such that for patterns of the same length,
410410
// those with a destructured slice come first.

src/librustc/middle/trans/controlflow.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ use util::ppaux;
2626
use middle::trans::type_::Type;
2727

2828
use std::str;
29-
use std::vec;
3029
use syntax::ast;
3130
use syntax::ast::ident;
3231
use syntax::ast_map::path_mod;
@@ -190,9 +189,13 @@ pub fn trans_log(log_ex: &ast::expr,
190189

191190
let (modpath, modname) = {
192191
let path = &mut bcx.fcx.path;
193-
let modpath = vec::append(
194-
~[path_mod(ccx.sess.ident_of(ccx.link_meta.name))],
195-
path.filtered(|e| match *e { path_mod(_) => true, _ => false }));
192+
let mut modpath = ~[path_mod(ccx.sess.ident_of(ccx.link_meta.name))];
193+
for path.iter().advance |e| {
194+
match *e {
195+
path_mod(_) => { modpath.push(*e) }
196+
_ => {}
197+
}
198+
}
196199
let modname = path_str(ccx.sess, modpath);
197200
(modpath, modname)
198201
};

src/librustdoc/attr_parser.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,9 @@ pub fn parse_crate(attrs: ~[ast::attribute]) -> CrateAttrs {
4545
}
4646

4747
pub fn parse_desc(attrs: ~[ast::attribute]) -> Option<~str> {
48-
let doc_strs = do doc_metas(attrs).filter_mapped |meta| {
49-
attr::get_meta_item_value_str(*meta).map(|s| s.to_owned())
50-
};
48+
let doc_strs = do doc_metas(attrs).consume_iter().filter_map |meta| {
49+
attr::get_meta_item_value_str(meta).map(|s| s.to_owned())
50+
}.collect::<~[~str]>();
5151
if doc_strs.is_empty() {
5252
None
5353
} else {

0 commit comments

Comments
 (0)