Print `char` using `{:?}` (#41)
diff --git a/src/v0.rs b/src/v0.rs
index ed3099b..4fd6cf0 100644
--- a/src/v0.rs
+++ b/src/v0.rs
@@ -56,21 +56,6 @@
Ok((Demangle { inner }, &parser.sym[parser.next..]))
}
-fn supported_const_generic_type(ty_tag: u8) -> bool {
- match ty_tag {
- // Unsigned integer types.
- b'h' | b't' | b'm' | b'y' | b'o' | b'j' |
- // Signed integer types.
- b'a' | b's' | b'l' | b'x' | b'n' | b'i' |
- // Bool.
- b'b' |
- // Char.
- b'c' => true,
-
- _ => false,
- }
-}
-
impl<'s> Display for Demangle<'s> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let mut printer = Printer {
@@ -554,14 +539,23 @@
return Ok(());
}
- if !supported_const_generic_type(ty_tag) {
- return Err(Invalid);
+ match ty_tag {
+ // Unsigned integer types.
+ b'h' | b't' | b'm' | b'y' | b'o' | b'j' |
+ // Bool.
+ b'b' |
+ // Char.
+ b'c' => {}
+
+ // Signed integer types.
+ b'a' | b's' | b'l' | b'x' | b'n' | b'i' => {
+ // Negation on signed integers.
+ let _ = self.eat(b'n');
+ }
+
+ _ => return Err(Invalid),
}
- // Negation on signed integers.
- if let b'a' | b's' | b'l' | b'x' | b'n' | b'i' = ty_tag {
- let _ = self.eat(b'n');
- }
self.hex_nibbles()?;
Ok(())
}
@@ -963,10 +957,6 @@
return Ok(());
}
- if !supported_const_generic_type(ty_tag) {
- invalid!(self);
- }
-
match ty_tag {
// Unsigned integer types.
b'h' | b't' | b'm' | b'y' | b'o' | b'j' => self.print_const_uint()?,
@@ -1035,7 +1025,7 @@
v = (v << 4) | (c.to_digit(16).unwrap() as u32);
}
if let Some(c) = char::from_u32(v) {
- write!(self.out, "'{}'", c)
+ write!(self.out, "{:?}", c)
} else {
invalid!(self)
}
@@ -1121,6 +1111,10 @@
"<const_generic::Char<'v'>>"
);
t_nohash!(
+ "_RMCs4fqI2P2rA04_13const_genericINtB0_4CharKca_E",
+ "<const_generic::Char<'\\n'>>"
+ );
+ t_nohash!(
"_RMCs4fqI2P2rA04_13const_genericINtB0_4CharKc2202_E",
"<const_generic::Char<'∂'>>"
);