diff --git a/Cargo.toml b/Cargo.toml index 5558126..782e58a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cwdemangle" -version = "0.1.6" +version = "0.1.7" edition = "2018" authors = ["Luke Street "] license = "MIT OR Apache-2.0" diff --git a/src/lib.rs b/src/lib.rs index ec9bf84..7c72b45 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -127,6 +127,12 @@ fn demangle_arg<'a>( mut str: &'a str, options: &DemangleOptions, ) -> Option<(String, String, &'a str)> { + // Negative constant + if let Some(str) = str.strip_prefix('-') { + let (size, rest) = parse_digits(str)?; + let out = format!("-{size}"); + return Some((out.clone(), String::new(), rest)); + } let mut result = String::new(); let (mut pre, mut post, rest) = parse_qualifiers(str); result += pre.as_str(); @@ -694,6 +700,10 @@ mod tests { demangle("QuerySymbolToMapFile___Q24nw4r2dbFPUcPC12OSModuleInfoUlPUcUl", &options), Some("nw4r::db::QuerySymbolToMapFile_(unsigned char*, const OSModuleInfo*, unsigned long, unsigned char*, unsigned long)".to_string()) ); + assert_eq!( + demangle("__ct__Q37JGadget27TLinkList<10JUTConsole,-24>8iteratorFQ37JGadget13TNodeLinkList8iterator", &options), + Some("JGadget::TLinkList::iterator::iterator(JGadget::TNodeLinkList::iterator)".to_string()) + ); } #[test]