Skip to content

Commit d2d0872

Browse files
committed
Implement size_hint for EscapeDefault
1 parent 025ca11 commit d2d0872

File tree

2 files changed

+14
-16
lines changed

2 files changed

+14
-16
lines changed

src/libcore/char.rs

+10-13
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,6 @@ pub trait CharExt {
147147
fn to_digit(self, radix: u32) -> Option<u32>;
148148
fn escape_unicode(self) -> EscapeUnicode;
149149
fn escape_default(self) -> EscapeDefault;
150-
fn needs_escape_default(self) -> bool;
151150
fn len_utf8(self) -> usize;
152151
fn len_utf16(self) -> usize;
153152
fn encode_utf8(self, dst: &mut [u8]) -> Option<usize>;
@@ -186,24 +185,13 @@ impl CharExt for char {
186185
'\t' => EscapeDefaultState::Backslash('t'),
187186
'\r' => EscapeDefaultState::Backslash('r'),
188187
'\n' => EscapeDefaultState::Backslash('n'),
189-
'\\' => EscapeDefaultState::Backslash('\\'),
190-
'\'' => EscapeDefaultState::Backslash('\''),
191-
'"' => EscapeDefaultState::Backslash('"'),
188+
'\\' | '\'' | '"' => EscapeDefaultState::Backslash(self),
192189
'\x20' ... '\x7e' => EscapeDefaultState::Char(self),
193190
_ => EscapeDefaultState::Unicode(self.escape_unicode())
194191
};
195192
EscapeDefault { state: init_state }
196193
}
197194

198-
#[inline]
199-
fn needs_escape_default(self) -> bool {
200-
match self {
201-
'\\' | '\'' | '"' => true,
202-
'\x20' ... '\x7e' => false,
203-
_ => true
204-
}
205-
}
206-
207195
#[inline]
208196
fn len_utf8(self) -> usize {
209197
let code = self as u32;
@@ -390,4 +378,13 @@ impl Iterator for EscapeDefault {
390378
EscapeDefaultState::Unicode(ref mut iter) => iter.next()
391379
}
392380
}
381+
382+
fn size_hint(&self) -> (usize, Option<usize>) {
383+
match self.state {
384+
EscapeDefaultState::Char(_) => (1, Some(1)),
385+
EscapeDefaultState::Backslash(_) => (2, Some(2)),
386+
EscapeDefaultState::Unicode(_) => (0, Some(10)),
387+
_ => (0, Some(0))
388+
}
389+
}
393390
}

src/libcore/fmt/mod.rs

+4-3
Original file line numberDiff line numberDiff line change
@@ -1313,11 +1313,12 @@ impl Debug for str {
13131313
try!(f.write_char('"'));
13141314
let mut from = 0;
13151315
for (i, c) in self.char_indices() {
1316+
let esc = c.escape_default();
13161317
// If char needs escaping, flush backlog so far and write, else skip
1317-
if c.needs_escape_default() {
1318+
if esc.size_hint().0 != 1 {
13181319
try!(f.write_str(&self[from..i]));
1319-
for e in c.escape_default() {
1320-
try!(f.write_char(e));
1320+
for c in esc {
1321+
try!(f.write_char(c));
13211322
}
13221323
from = i + c.len_utf8();
13231324
}

0 commit comments

Comments
 (0)