Skip to content

Commit 6bca883

Browse files
authored
Unrolled build for #146410
Rollup merge of #146410 - hkBst:repeat-1, r=jhpratt Iterator repeat: no infinite loop for `last` and `count` This removes two cases of infinite looping from [`Repeat`](https://doc.rust-lang.org/nightly/std/iter/struct.Repeat.html): - [`last`](https://doc.rust-lang.org/nightly/std/iter/trait.Iterator.html#method.last): By viewing the iterator as returning None after [omega](https://en.wikipedia.org/wiki/Ordinal_number) calls to `next`, this method can simply return the repeated element. - [`count`](https://doc.rust-lang.org/nightly/std/iter/trait.Iterator.html#method.count): From its docs: """The method does no guarding against overflows, so counting elements of an iterator with more than [usize::MAX](https://doc.rust-lang.org/nightly/std/primitive.usize.html#associatedconstant.MAX) elements either produces the wrong result or panics. If overflow checks are enabled, a panic is guaranteed.""", so a panic'ing impl is allowed by the docs, and is more honest than an infinite loop.
2 parents ba4b643 + c89b6a9 commit 6bca883

File tree

1 file changed

+4
-3
lines changed

1 file changed

+4
-3
lines changed

library/core/src/iter/sources/repeat.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use crate::num::NonZero;
99
/// [`Iterator::take()`], in order to make them finite.
1010
///
1111
/// Use [`str::repeat()`] instead of this function if you just want to repeat
12-
/// a char/string `n`th times.
12+
/// a char/string `n` times.
1313
///
1414
/// If the element type of the iterator you need does not implement `Clone`,
1515
/// or if you do not want to keep the repeated element in memory, you can
@@ -98,11 +98,12 @@ impl<A: Clone> Iterator for Repeat<A> {
9898
}
9999

100100
fn last(self) -> Option<A> {
101-
loop {}
101+
Some(self.element)
102102
}
103103

104+
#[track_caller]
104105
fn count(self) -> usize {
105-
loop {}
106+
panic!("iterator is infinite");
106107
}
107108
}
108109

0 commit comments

Comments
 (0)