From fb83e84bcdeb1ecbf92dc9abe0dfc101f8052c0b Mon Sep 17 00:00:00 2001 From: Luke Street Date: Sat, 3 Sep 2022 13:09:40 -0400 Subject: [PATCH] Minor fix for __init --- src/lib.rs | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 822c0d0..39ef636 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -253,10 +253,17 @@ pub fn demangle(mut str: &str) -> Option { str = &str[2..]; } { - let idx = str.rfind("__")?; - let (fn_name_out, rest) = str.split_at(idx); + let idx = str.find("__")?; + let (fn_name_out, mut rest) = str.split_at(idx); if special { - fn_name = fn_name_out.to_string(); + if fn_name_out == "init" { + // Special case for double __ + let rest_idx = rest[2..].find("__")?; + fn_name = str[..rest_idx + 6].to_string(); + rest = &rest[rest_idx + 2..]; + } else { + fn_name = fn_name_out.to_string(); + } } else { let (name, args) = demangle_template_args(fn_name_out)?; fn_name = format!("{}{}", name, args); @@ -507,5 +514,9 @@ mod tests { demangle("__init__mNull__Q24rstl66basic_string,Q24rstl17rmemory_allocator>"), Some("rstl::basic_string, rstl::rmemory_allocator>::__init__mNull".to_string()) ); + assert_eq!( + demangle("__dt__26__partial_array_destructorFv"), + Some("__partial_array_destructor::~__partial_array_destructor(void)".to_string()) + ); } }