Skip to content

Commit c07ec50

Browse files
committed
rollup merge of rust-lang#22287: Ryman/purge_carthographers
This overlaps with rust-lang#22276 (I left make check running overnight) but covers a number of additional cases and has a few rewrites where the clones are not even necessary. This also implements `RandomAccessIterator` for `iter::Cloned` cc @steveklabnik, you may want to glance at this before rust-lang#22281 gets the bors treatment
2 parents c5fddd8 + d2f54e6 commit c07ec50

File tree

48 files changed

+130
-127
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+130
-127
lines changed

src/compiletest/compiletest.rs

+1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#![feature(test)]
2222
#![feature(unicode)]
2323
#![feature(env)]
24+
#![feature(core)]
2425

2526
#![deny(warnings)]
2627

src/compiletest/runtest.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1134,7 +1134,7 @@ fn compile_test_(config: &Config, props: &TestProps,
11341134
// FIXME (#9639): This needs to handle non-utf8 paths
11351135
let mut link_args = vec!("-L".to_string(),
11361136
aux_dir.as_str().unwrap().to_string());
1137-
link_args.extend(extra_args.iter().map(|s| s.clone()));
1137+
link_args.extend(extra_args.iter().cloned());
11381138
let args = make_compile_args(config,
11391139
props,
11401140
link_args,

src/libcollections/bit.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -2286,7 +2286,7 @@ mod tests {
22862286
#[test]
22872287
fn test_from_bools() {
22882288
let bools = vec![true, false, true, true];
2289-
let bitv: Bitv = bools.iter().map(|n| *n).collect();
2289+
let bitv: Bitv = bools.iter().cloned().collect();
22902290
assert_eq!(format!("{:?}", bitv), "1011");
22912291
}
22922292

@@ -2299,12 +2299,12 @@ mod tests {
22992299
#[test]
23002300
fn test_bitv_iterator() {
23012301
let bools = vec![true, false, true, true];
2302-
let bitv: Bitv = bools.iter().map(|n| *n).collect();
2302+
let bitv: Bitv = bools.iter().cloned().collect();
23032303

23042304
assert_eq!(bitv.iter().collect::<Vec<bool>>(), bools);
23052305

23062306
let long: Vec<_> = (0i32..10000).map(|i| i % 2 == 0).collect();
2307-
let bitv: Bitv = long.iter().map(|n| *n).collect();
2307+
let bitv: Bitv = long.iter().cloned().collect();
23082308
assert_eq!(bitv.iter().collect::<Vec<bool>>(), long)
23092309
}
23102310

src/libcollections/dlist.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -907,7 +907,7 @@ impl<A: Ord> Ord for DList<A> {
907907
#[stable(feature = "rust1", since = "1.0.0")]
908908
impl<A: Clone> Clone for DList<A> {
909909
fn clone(&self) -> DList<A> {
910-
self.iter().map(|x| x.clone()).collect()
910+
self.iter().cloned().collect()
911911
}
912912
}
913913

@@ -1025,7 +1025,7 @@ mod tests {
10251025

10261026
#[cfg(test)]
10271027
fn list_from<T: Clone>(v: &[T]) -> DList<T> {
1028-
v.iter().map(|x| (*x).clone()).collect()
1028+
v.iter().cloned().collect()
10291029
}
10301030

10311031
#[test]

src/libcore/iter.rs

+22-5
Original file line numberDiff line numberDiff line change
@@ -332,7 +332,7 @@ pub trait IteratorExt: Iterator + Sized {
332332
///
333333
/// ```
334334
/// let xs = [100, 200, 300];
335-
/// let mut it = xs.iter().map(|x| *x).peekable();
335+
/// let mut it = xs.iter().cloned().peekable();
336336
/// assert_eq!(*it.peek().unwrap(), 100);
337337
/// assert_eq!(it.next().unwrap(), 100);
338338
/// assert_eq!(it.next().unwrap(), 200);
@@ -522,7 +522,7 @@ pub trait IteratorExt: Iterator + Sized {
522522
///
523523
/// let a = [1, 4, 2, 3, 8, 9, 6];
524524
/// let sum = a.iter()
525-
/// .map(|&x| x)
525+
/// .cloned()
526526
/// .inspect(|&x| println!("filtering {}", x))
527527
/// .filter(|&x| x % 2 == 0)
528528
/// .inspect(|&x| println!("{} made it through", x))
@@ -561,7 +561,7 @@ pub trait IteratorExt: Iterator + Sized {
561561
///
562562
/// ```
563563
/// let a = [1, 2, 3, 4, 5];
564-
/// let b: Vec<_> = a.iter().map(|&x| x).collect();
564+
/// let b: Vec<_> = a.iter().cloned().collect();
565565
/// assert_eq!(a, b);
566566
/// ```
567567
#[inline]
@@ -937,7 +937,7 @@ pub trait IteratorExt: Iterator + Sized {
937937
///
938938
/// ```
939939
/// let a = [(1, 2), (3, 4)];
940-
/// let (left, right): (Vec<_>, Vec<_>) = a.iter().map(|&x| x).unzip();
940+
/// let (left, right): (Vec<_>, Vec<_>) = a.iter().cloned().unzip();
941941
/// assert_eq!([1, 3], left);
942942
/// assert_eq!([2, 4], right);
943943
/// ```
@@ -1142,7 +1142,7 @@ pub trait AdditiveIterator<A> {
11421142
/// use std::iter::AdditiveIterator;
11431143
///
11441144
/// let a = [1i32, 2, 3, 4, 5];
1145-
/// let mut it = a.iter().map(|&x| x);
1145+
/// let mut it = a.iter().cloned();
11461146
/// assert!(it.sum() == 15);
11471147
/// ```
11481148
fn sum(self) -> A;
@@ -1305,6 +1305,23 @@ impl<T, D, I> ExactSizeIterator for Cloned<I> where
13051305
I: ExactSizeIterator<Item=D>,
13061306
{}
13071307

1308+
#[unstable(feature = "core", reason = "trait is experimental")]
1309+
impl<T, D, I> RandomAccessIterator for Cloned<I> where
1310+
T: Clone,
1311+
D: Deref<Target=T>,
1312+
I: RandomAccessIterator<Item=D>
1313+
{
1314+
#[inline]
1315+
fn indexable(&self) -> usize {
1316+
self.it.indexable()
1317+
}
1318+
1319+
#[inline]
1320+
fn idx(&mut self, index: usize) -> Option<T> {
1321+
self.it.idx(index).cloned()
1322+
}
1323+
}
1324+
13081325
/// An iterator that repeats endlessly
13091326
#[derive(Clone)]
13101327
#[must_use = "iterator adaptors are lazy and do nothing unless consumed"]

src/libcoretest/iter.rs

+22-22
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ fn test_iterator_chain() {
9191
assert_eq!(i, expected.len());
9292

9393
let ys = count(30, 10).take(4);
94-
let mut it = xs.iter().map(|&x| x).chain(ys);
94+
let mut it = xs.iter().cloned().chain(ys);
9595
let mut i = 0;
9696
for x in it {
9797
assert_eq!(x, expected[i]);
@@ -119,7 +119,7 @@ fn test_iterator_enumerate() {
119119
#[test]
120120
fn test_iterator_peekable() {
121121
let xs = vec![0, 1, 2, 3, 4, 5];
122-
let mut it = xs.iter().map(|&x|x).peekable();
122+
let mut it = xs.iter().cloned().peekable();
123123

124124
assert_eq!(it.len(), 6);
125125
assert_eq!(it.peek().unwrap(), &0);
@@ -259,7 +259,7 @@ fn test_inspect() {
259259
let mut n = 0;
260260

261261
let ys = xs.iter()
262-
.map(|&x| x)
262+
.cloned()
263263
.inspect(|_| n += 1)
264264
.collect::<Vec<uint>>();
265265

@@ -329,33 +329,33 @@ fn test_iterator_len() {
329329
#[test]
330330
fn test_iterator_sum() {
331331
let v: &[i32] = &[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
332-
assert_eq!(v[..4].iter().map(|&x| x).sum(), 6);
333-
assert_eq!(v.iter().map(|&x| x).sum(), 55);
334-
assert_eq!(v[..0].iter().map(|&x| x).sum(), 0);
332+
assert_eq!(v[..4].iter().cloned().sum(), 6);
333+
assert_eq!(v.iter().cloned().sum(), 55);
334+
assert_eq!(v[..0].iter().cloned().sum(), 0);
335335
}
336336

337337
#[test]
338338
fn test_iterator_product() {
339339
let v: &[i32] = &[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
340-
assert_eq!(v[..4].iter().map(|&x| x).product(), 0);
341-
assert_eq!(v[1..5].iter().map(|&x| x).product(), 24);
342-
assert_eq!(v[..0].iter().map(|&x| x).product(), 1);
340+
assert_eq!(v[..4].iter().cloned().product(), 0);
341+
assert_eq!(v[1..5].iter().cloned().product(), 24);
342+
assert_eq!(v[..0].iter().cloned().product(), 1);
343343
}
344344

345345
#[test]
346346
fn test_iterator_max() {
347347
let v: &[_] = &[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
348-
assert_eq!(v[..4].iter().map(|&x| x).max(), Some(3));
349-
assert_eq!(v.iter().map(|&x| x).max(), Some(10));
350-
assert_eq!(v[..0].iter().map(|&x| x).max(), None);
348+
assert_eq!(v[..4].iter().cloned().max(), Some(3));
349+
assert_eq!(v.iter().cloned().max(), Some(10));
350+
assert_eq!(v[..0].iter().cloned().max(), None);
351351
}
352352

353353
#[test]
354354
fn test_iterator_min() {
355355
let v: &[_] = &[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
356-
assert_eq!(v[..4].iter().map(|&x| x).min(), Some(0));
357-
assert_eq!(v.iter().map(|&x| x).min(), Some(0));
358-
assert_eq!(v[..0].iter().map(|&x| x).min(), None);
356+
assert_eq!(v[..4].iter().cloned().min(), Some(0));
357+
assert_eq!(v.iter().cloned().min(), Some(0));
358+
assert_eq!(v[..0].iter().cloned().min(), None);
359359
}
360360

361361
#[test]
@@ -373,7 +373,7 @@ fn test_iterator_size_hint() {
373373
assert_eq!(c.clone().take_while(|_| false).size_hint(), (0, None));
374374
assert_eq!(c.clone().skip_while(|_| false).size_hint(), (0, None));
375375
assert_eq!(c.clone().enumerate().size_hint(), (uint::MAX, None));
376-
assert_eq!(c.clone().chain(vi.clone().map(|&i| i)).size_hint(), (uint::MAX, None));
376+
assert_eq!(c.clone().chain(vi.clone().cloned()).size_hint(), (uint::MAX, None));
377377
assert_eq!(c.clone().zip(vi.clone()).size_hint(), (10, Some(10)));
378378
assert_eq!(c.clone().scan(0, |_,_| Some(0)).size_hint(), (0, None));
379379
assert_eq!(c.clone().filter(|_| false).size_hint(), (0, None));
@@ -398,7 +398,7 @@ fn test_iterator_size_hint() {
398398
#[test]
399399
fn test_collect() {
400400
let a = vec![1, 2, 3, 4, 5];
401-
let b: Vec<int> = a.iter().map(|&x| x).collect();
401+
let b: Vec<int> = a.iter().cloned().collect();
402402
assert!(a == b);
403403
}
404404

@@ -471,7 +471,7 @@ fn test_rev() {
471471
let mut it = xs.iter();
472472
it.next();
473473
it.next();
474-
assert!(it.rev().map(|&x| x).collect::<Vec<int>>() ==
474+
assert!(it.rev().cloned().collect::<Vec<int>>() ==
475475
vec![16, 14, 12, 10, 8, 6]);
476476
}
477477

@@ -508,7 +508,7 @@ fn test_double_ended_map() {
508508
#[test]
509509
fn test_double_ended_enumerate() {
510510
let xs = [1, 2, 3, 4, 5, 6];
511-
let mut it = xs.iter().map(|&x| x).enumerate();
511+
let mut it = xs.iter().cloned().enumerate();
512512
assert_eq!(it.next(), Some((0, 1)));
513513
assert_eq!(it.next(), Some((1, 2)));
514514
assert_eq!(it.next_back(), Some((5, 6)));
@@ -522,8 +522,8 @@ fn test_double_ended_enumerate() {
522522
fn test_double_ended_zip() {
523523
let xs = [1, 2, 3, 4, 5, 6];
524524
let ys = [1, 2, 3, 7];
525-
let a = xs.iter().map(|&x| x);
526-
let b = ys.iter().map(|&x| x);
525+
let a = xs.iter().cloned();
526+
let b = ys.iter().cloned();
527527
let mut it = a.zip(b);
528528
assert_eq!(it.next(), Some((1, 1)));
529529
assert_eq!(it.next(), Some((2, 2)));
@@ -713,7 +713,7 @@ fn test_random_access_inspect() {
713713
fn test_random_access_map() {
714714
let xs = [1, 2, 3, 4, 5];
715715

716-
let mut it = xs.iter().map(|x| *x);
716+
let mut it = xs.iter().cloned();
717717
assert_eq!(xs.len(), it.indexable());
718718
for (i, elt) in xs.iter().enumerate() {
719719
assert_eq!(Some(*elt), it.idx(i));

src/librand/isaac.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ impl<'a> SeedableRng<&'a [u32]> for IsaacRng {
215215
fn reseed(&mut self, seed: &'a [u32]) {
216216
// make the seed into [seed[0], seed[1], ..., seed[seed.len()
217217
// - 1], 0, 0, ...], to fill rng.rsl.
218-
let seed_iter = seed.iter().map(|&x| x).chain(repeat(0u32));
218+
let seed_iter = seed.iter().cloned().chain(repeat(0u32));
219219

220220
for (rsl_elem, seed_elem) in self.rsl.iter_mut().zip(seed_iter) {
221221
*rsl_elem = seed_elem;
@@ -458,7 +458,7 @@ impl<'a> SeedableRng<&'a [u64]> for Isaac64Rng {
458458
fn reseed(&mut self, seed: &'a [u64]) {
459459
// make the seed into [seed[0], seed[1], ..., seed[seed.len()
460460
// - 1], 0, 0, ...], to fill rng.rsl.
461-
let seed_iter = seed.iter().map(|&x| x).chain(repeat(0u64));
461+
let seed_iter = seed.iter().cloned().chain(repeat(0u64));
462462

463463
for (rsl_elem, seed_elem) in self.rsl.iter_mut().zip(seed_iter) {
464464
*rsl_elem = seed_elem;

src/librustc/metadata/cstore.rs

+2-3
Original file line numberDiff line numberDiff line change
@@ -139,8 +139,7 @@ impl CStore {
139139
pub fn get_used_crate_source(&self, cnum: ast::CrateNum)
140140
-> Option<CrateSource> {
141141
self.used_crate_sources.borrow_mut()
142-
.iter().find(|source| source.cnum == cnum)
143-
.map(|source| source.clone())
142+
.iter().find(|source| source.cnum == cnum).cloned()
144143
}
145144

146145
pub fn reset(&self) {
@@ -218,7 +217,7 @@ impl CStore {
218217

219218
pub fn find_extern_mod_stmt_cnum(&self, emod_id: ast::NodeId)
220219
-> Option<ast::CrateNum> {
221-
self.extern_mod_crate_map.borrow().get(&emod_id).map(|x| *x)
220+
self.extern_mod_crate_map.borrow().get(&emod_id).cloned()
222221
}
223222
}
224223

src/librustc/middle/check_match.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ impl<'a> fmt::Debug for Matrix<'a> {
7676
pretty_printed_matrix.iter().map(|row| row[col].len()).max().unwrap_or(0)
7777
}).collect();
7878

79-
let total_width = column_widths.iter().map(|n| *n).sum() + column_count * 3 + 1;
79+
let total_width = column_widths.iter().cloned().sum() + column_count * 3 + 1;
8080
let br = repeat('+').take(total_width).collect::<String>();
8181
try!(write!(f, "{}\n", br));
8282
for row in pretty_printed_matrix {

src/librustc/middle/const_eval.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -501,7 +501,7 @@ fn lit_to_const(lit: &ast::Lit, ty_hint: Option<Ty>) -> const_val {
501501
match lit.node {
502502
ast::LitStr(ref s, _) => const_str((*s).clone()),
503503
ast::LitBinary(ref data) => {
504-
const_binary(Rc::new(data.iter().map(|x| *x).collect()))
504+
const_binary(data.clone())
505505
}
506506
ast::LitByte(n) => const_uint(n as u64),
507507
ast::LitChar(n) => const_uint(n as u64),

src/librustc/middle/dataflow.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ struct PropagationContext<'a, 'b: 'a, 'tcx: 'b, O: 'a> {
8989
}
9090

9191
fn to_cfgidx_or_die(id: ast::NodeId, index: &NodeMap<CFGIndex>) -> CFGIndex {
92-
let opt_cfgindex = index.get(&id).map(|&i|i);
92+
let opt_cfgindex = index.get(&id).cloned();
9393
opt_cfgindex.unwrap_or_else(|| {
9494
panic!("nodeid_to_index does not have entry for NodeId {}", id);
9595
})
@@ -400,7 +400,7 @@ impl<'a, 'tcx, O:DataFlowOperator> DataFlowContext<'a, 'tcx, O> {
400400

401401
let mut changed = false;
402402
for &node_id in &edge.data.exiting_scopes {
403-
let opt_cfg_idx = self.nodeid_to_index.get(&node_id).map(|&i|i);
403+
let opt_cfg_idx = self.nodeid_to_index.get(&node_id).cloned();
404404
match opt_cfg_idx {
405405
Some(cfg_idx) => {
406406
let (start, end) = self.compute_id_range(cfg_idx);

src/librustc/middle/dependency_format.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ fn calculate_type(sess: &session::Session,
158158

159159
// Collect what we've got so far in the return vector.
160160
let mut ret = (1..sess.cstore.next_crate_num()).map(|i| {
161-
match formats.get(&i).map(|v| *v) {
161+
match formats.get(&i).cloned() {
162162
v @ Some(cstore::RequireDynamic) => v,
163163
_ => None,
164164
}

src/librustc/middle/infer/error_reporting.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -924,7 +924,7 @@ impl<'a, 'tcx> Rebuilder<'a, 'tcx> {
924924

925925
fn rebuild(&self)
926926
-> (ast::FnDecl, Option<ast::ExplicitSelf_>, ast::Generics) {
927-
let mut expl_self_opt = self.expl_self_opt.map(|x| x.clone());
927+
let mut expl_self_opt = self.expl_self_opt.cloned();
928928
let mut inputs = self.fn_decl.inputs.clone();
929929
let mut output = self.fn_decl.output.clone();
930930
let mut ty_params = self.generics.ty_params.clone();

src/librustc/middle/lang_items.rs

+5-11
Original file line numberDiff line numberDiff line change
@@ -147,18 +147,12 @@ struct LanguageItemCollector<'a> {
147147

148148
impl<'a, 'v> Visitor<'v> for LanguageItemCollector<'a> {
149149
fn visit_item(&mut self, item: &ast::Item) {
150-
match extract(&item.attrs) {
151-
Some(value) => {
152-
let item_index = self.item_refs.get(&value[]).map(|x| *x);
153-
154-
match item_index {
155-
Some(item_index) => {
156-
self.collect_item(item_index, local_def(item.id), item.span)
157-
}
158-
None => {}
159-
}
150+
if let Some(value) = extract(&item.attrs) {
151+
let item_index = self.item_refs.get(&value[]).cloned();
152+
153+
if let Some(item_index) = item_index {
154+
self.collect_item(item_index, local_def(item.id), item.span)
160155
}
161-
None => {}
162156
}
163157

164158
visit::walk_item(self, item);

src/librustc/middle/region.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -407,7 +407,7 @@ impl RegionMaps {
407407

408408
pub fn opt_encl_scope(&self, id: CodeExtent) -> Option<CodeExtent> {
409409
//! Returns the narrowest scope that encloses `id`, if any.
410-
self.scope_map.borrow().get(&id).map(|x| *x)
410+
self.scope_map.borrow().get(&id).cloned()
411411
}
412412

413413
#[allow(dead_code)] // used in middle::cfg

src/librustc/middle/resolve_lifetime.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -562,7 +562,7 @@ pub fn early_bound_lifetimes<'a>(generics: &'a ast::Generics) -> Vec<ast::Lifeti
562562

563563
generics.lifetimes.iter()
564564
.filter(|l| referenced_idents.iter().any(|&i| i == l.lifetime.name))
565-
.map(|l| (*l).clone())
565+
.cloned()
566566
.collect()
567567
}
568568

src/librustc/middle/subst.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ impl<'tcx> Substs<'tcx> {
113113
}
114114

115115
pub fn self_ty(&self) -> Option<Ty<'tcx>> {
116-
self.types.get_self().map(|&t| t)
116+
self.types.get_self().cloned()
117117
}
118118

119119
pub fn with_self_ty(&self, self_ty: Ty<'tcx>) -> Substs<'tcx> {

0 commit comments

Comments
 (0)