1 //! Helpers for demangling function names.
2 
3 /// Demangles a single function name into a user-readable form.
4 ///
5 /// Currently supported: Rust/C/C++ function names.
demangle_function_name(writer: &mut impl core::fmt::Write, name: &str) -> core::fmt::Result6 pub fn demangle_function_name(writer: &mut impl core::fmt::Write, name: &str) -> core::fmt::Result {
7     #[cfg(feature = "demangle")]
8     if let Ok(demangled) = rustc_demangle::try_demangle(name) {
9         return write!(writer, "{demangled}");
10     } else if let Ok(symbol) = cpp_demangle::Symbol::new(name) {
11         let options = cpp_demangle::DemangleOptions::default();
12         if let Ok(demangled) = symbol.demangle(&options) {
13             return write!(writer, "{demangled}");
14         }
15     }
16 
17     write!(writer, "{name}")
18 }
19 
20 /// Demangles a function name if it's provided, or returns a unified representation based on the
21 /// function index otherwise.
demangle_function_name_or_index( writer: &mut impl core::fmt::Write, name: Option<&str>, func_id: usize, ) -> core::fmt::Result22 pub fn demangle_function_name_or_index(
23     writer: &mut impl core::fmt::Write,
24     name: Option<&str>,
25     func_id: usize,
26 ) -> core::fmt::Result {
27     match name {
28         Some(name) => demangle_function_name(writer, name),
29         None => write!(writer, "<wasm function {func_id}>"),
30     }
31 }
32