Skip to content

Commit 8c0ddca

Browse files
committed
legacy::demangle iterate over bytes
1 parent 649c346 commit 8c0ddca

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

src/legacy.rs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -69,15 +69,16 @@ pub fn demangle(s: &str) -> Result<(Demangle<'_>, &str), ()> {
6969
}
7070

7171
let mut elements = 0;
72-
let mut chars = inner.chars();
72+
// we checked, that string is in ascii range
73+
let mut chars = inner.bytes();
7374
let mut c = chars.next().ok_or(())?;
74-
while c != 'E' {
75+
while c != b'E' {
7576
// Decode an identifier element's length.
76-
if !c.is_digit(10) {
77+
if !(c as char).is_digit(10) {
7778
return Err(());
7879
}
7980
let mut len = 0usize;
80-
while let Some(d) = c.to_digit(10) {
81+
while let Some(d) = (c as char).to_digit(10) {
8182
len = len
8283
.checked_mul(10)
8384
.and_then(|len| len.checked_add(d as usize))
@@ -94,7 +95,11 @@ pub fn demangle(s: &str) -> Result<(Demangle<'_>, &str), ()> {
9495
elements += 1;
9596
}
9697

97-
Ok((Demangle { inner, elements }, chars.as_str()))
98+
let chars_left = chars.count();
99+
Ok((
100+
Demangle { inner, elements },
101+
&inner[inner.len() - chars_left..],
102+
))
98103
}
99104

100105
// Rust hashes are hex digits with an `h` prepended.

0 commit comments

Comments
 (0)