mirror of
https://github.com/rust-lang/rust.git
synced 2026-05-08 09:38:26 +03:00
auto merge of #13615 : alexcrichton/rust/improve-demangling, r=brson
Previously, symbols with rust escape sequences (denoted with dollar signs) weren't demangled if the escape sequence showed up in the middle. This alters the printing loop to look through the entire string for dollar characters.
This commit is contained in:
@@ -109,7 +109,7 @@ fn demangle(writer: &mut Writer, s: &str) -> IoResult<()> {
|
||||
let i: uint = from_str(s.slice_to(s.len() - rest.len())).unwrap();
|
||||
s = rest.slice_from(i);
|
||||
rest = rest.slice_to(i);
|
||||
loop {
|
||||
while rest.len() > 0 {
|
||||
if rest.starts_with("$") {
|
||||
macro_rules! demangle(
|
||||
($($pat:expr => $demangled:expr),*) => ({
|
||||
@@ -144,8 +144,12 @@ macro_rules! demangle(
|
||||
"$x5d" => "]"
|
||||
)
|
||||
} else {
|
||||
try!(writer.write_str(rest));
|
||||
break;
|
||||
let idx = match rest.find('$') {
|
||||
None => rest.len(),
|
||||
Some(i) => i,
|
||||
};
|
||||
try!(writer.write_str(rest.slice_to(idx)));
|
||||
rest = rest.slice_from(idx);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -774,4 +778,10 @@ fn demangle_dollars() {
|
||||
t!("_ZN8$UP$test4foobE", "~test::foob");
|
||||
t!("_ZN8$x20test4foobE", " test::foob");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn demangle_many_dollars() {
|
||||
t!("_ZN12test$x20test4foobE", "test test::foob");
|
||||
t!("_ZN12test$UP$test4foobE", "test~test::foob");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user