Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
bytecodealliance
GitHub Repository: bytecodealliance/wasmtime
Path: blob/main/crates/environ/src/demangling.rs
1691 views
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.
6
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.
22
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
33