Skip to content

Commit 619e5e6

Browse files
committed
Added verbose mode to undname to support basic AST debugging
1 parent 520e286 commit 619e5e6

File tree

1 file changed

+25
-11
lines changed

1 file changed

+25
-11
lines changed

src/bin/undname.rs

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,36 @@ use std::io;
55
use std::io::BufRead;
66

77
fn main() {
8-
let args = env::args();
8+
let mut args: Vec<_> = env::args().collect();
9+
args.remove(0);
10+
11+
let verbose = if args.get(0).map(|x| x.as_str()) == Some("-v") {
12+
args.remove(0);
13+
true
14+
} else {
15+
false
16+
};
917

1018
let print_demangled = |sym: &str| {
11-
let demangled = msvc_demangler::demangle(&sym, msvc_demangler::DemangleFlags::llvm());
19+
let parsed = match msvc_demangler::parse(&sym) {
20+
Ok(parsed) => parsed,
21+
Err(_) => {
22+
println!("{}", sym);
23+
return;
24+
}
25+
};
26+
if verbose {
27+
eprintln!("{:#?}", &parsed);
28+
}
29+
let flags = msvc_demangler::DemangleFlags::llvm();
30+
let demangled = msvc_demangler::serialize(&parsed, flags);
1231
match demangled {
1332
Ok(ref string) => println!("{}", string),
1433
_ => println!("{}", sym),
1534
}
1635
};
1736

18-
if args.len() == 1 {
37+
if args.is_empty() {
1938
let stdin = io::stdin();
2039
let handle = stdin.lock();
2140

@@ -25,14 +44,9 @@ fn main() {
2544
_ => continue,
2645
}
2746
}
28-
return;
29-
}
30-
31-
for (i, arg) in env::args().enumerate() {
32-
if i == 0 {
33-
continue;
47+
} else {
48+
for arg in args {
49+
print_demangled(&arg);
3450
}
35-
36-
print_demangled(&arg);
3751
}
3852
}

0 commit comments

Comments
 (0)