Skip to content

Commit 61d4587

Browse files
authored
Merge pull request #9 from vlaci/master
demangle: raise ValueError on string formatting issues as well
2 parents 6df7e35 + 4f005bd commit 61d4587

File tree

1 file changed

+11
-7
lines changed

1 file changed

+11
-7
lines changed

src/lib.rs

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,20 +22,24 @@ use pyo3::exceptions;
2222
/// >>> demangle('invalid c++ symbol')
2323
/// Traceback (most recent call last):
2424
/// ...
25-
/// ValueError: mangled symbol is not well-formed
25+
/// ValueError: ('Could not demangle symbol', 'mangled symbol is not well-formed')
2626
#[pymodule]
2727
fn cpp_demangle(_py: Python, m: &PyModule) -> PyResult<()> {
2828
// This adds a function to the python module:
2929
/// Demangles a mangled c++ linker symbol name and returns it as a string
3030
#[pyfn(m)]
3131
fn demangle(mangled: String) -> PyResult<String> {
32-
match ::cpp_demangle::Symbol::new(&mangled[..]) {
33-
// Return the output as a string to Python
34-
Ok(sym) => Ok(sym.to_string()),
32+
let symbol = ::cpp_demangle::Symbol::new(&mangled[..]).map_err(|error| {
33+
exceptions::PyValueError::new_err(("Could not demangle symbol", error.to_string()))
34+
})?;
35+
let demangled = symbol.demangle(&Default::default()).map_err(|error| {
36+
exceptions::PyValueError::new_err((
37+
"Could not format demangled name as string",
38+
error.to_string(),
39+
))
40+
})?;
3541

36-
// on an error, this will raise a python ValueError exception!
37-
Err(error) => return Err(exceptions::PyValueError::new_err(error.to_string()))
38-
}
42+
Ok(demangled)
3943
}
4044

4145
Ok(())

0 commit comments

Comments
 (0)