Skip to content

Commit 29e8b6e

Browse files
committed
libcore: implement str::each_char_reverse correctly.
Previously, `each_char_reverse` was not iterating at all, so the testcase never ran properly.
1 parent 12df654 commit 29e8b6e

File tree

1 file changed

+9
-10
lines changed

1 file changed

+9
-10
lines changed

src/libcore/str.rs

+9-10
Original file line numberDiff line numberDiff line change
@@ -1020,22 +1020,21 @@ pub fn each_chari(s: &str, it: &fn(uint, char) -> bool) {
10201020
/// Iterates over the chars in a string in reverse
10211021
#[inline(always)]
10221022
pub fn each_char_reverse(s: &str, it: &fn(char) -> bool) {
1023-
let mut pos = 0;
1024-
let len = s.char_len();
1025-
while pos > 0 {
1026-
let CharRange {ch, next} = char_range_at_reverse(s, pos);
1027-
pos = next;
1028-
if !it(ch) { break; }
1029-
}
1023+
each_chari_reverse(s, |_, c| it(c))
10301024
}
10311025

10321026
// Iterates over the chars in a string in reverse, with indices
10331027
#[inline(always)]
10341028
pub fn each_chari_reverse(s: &str, it: &fn(uint, char) -> bool) {
1029+
let mut pos = s.len();
10351030
let mut ch_pos = s.char_len();
1036-
for s.each_char_reverse |ch| {
1031+
while pos > 0 {
1032+
let CharRange {ch, next} = char_range_at_reverse(s, pos);
1033+
pos = next;
10371034
ch_pos -= 1;
1035+
10381036
if !it(ch_pos, ch) { break; }
1037+
10391038
}
10401039
}
10411040

@@ -3661,10 +3660,10 @@ mod tests {
36613660
fn test_each_char_reverse() {
36623661
let s = ~"ศไทย中华Việt Nam";
36633662
let v = ~['ศ','ไ','ท','ย','中','华','V','i','ệ','t',' ','N','a','m'];
3664-
let mut pos = 0;
3663+
let mut pos = v.len();
36653664
for s.each_char_reverse |ch| {
3665+
pos -= 1;
36663666
fail_unless!(ch == v[pos]);
3667-
pos += 1;
36683667
}
36693668
}
36703669

0 commit comments

Comments
 (0)