Skip to content

Commit f3a6eb3

Browse files
authored
Add support for fixed-point types (#298)
1 parent 15bbde1 commit f3a6eb3

File tree

2 files changed

+60
-1
lines changed

2 files changed

+60
-1
lines changed

src/ast.rs

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4054,6 +4054,15 @@ define_vocabulary! {
40544054
/// ::= Da # auto
40554055
/// ::= Dc # decltype(auto)
40564056
/// ::= Dn # std::nullptr_t (i.e., decltype(nullptr))
4057+
/// ::= [DS] DA # N1169 fixed-point [_Sat] T _Accum
4058+
/// ::= [DS] DR # N1169 fixed-point [_Sat] T _Fract
4059+
///
4060+
/// <fixed-point-size> ::= s # short
4061+
/// ::= t # unsigned short
4062+
/// ::= i # plain
4063+
/// ::= j # unsigned
4064+
/// ::= l # long
4065+
/// ::= m # unsigned long
40574066
/// ```
40584067
#[derive(Clone, Debug, PartialEq, Eq)]
40594068
pub enum StandardBuiltinType {
@@ -4088,7 +4097,31 @@ define_vocabulary! {
40884097
Char8 (b"Du", "char8_t"),
40894098
Auto (b"Da", "auto"),
40904099
Decltype (b"Dc", "decltype(auto)"),
4091-
Nullptr (b"Dn", "std::nullptr_t")
4100+
Nullptr (b"Dn", "std::nullptr_t"),
4101+
AccumShort (b"DAs", "short _Accum"),
4102+
AccumUShort (b"DAt", "unsigned short _Accum"),
4103+
Accum (b"DAi", "_Accum"),
4104+
AccumUnsigned (b"DAj", "unsigned _Accum"),
4105+
AccumLong (b"DAl", "long _Accum"),
4106+
AccumULong (b"DAm", "unsigned long _Accum"),
4107+
FractShort (b"DRs", "short _Fract"),
4108+
FractUShort (b"DRt", "unsigned short _Fract"),
4109+
Fract (b"DRi", "_Fract"),
4110+
FractUnsigned (b"DRj", "unsigned _Fract"),
4111+
FractLong (b"DRl", "long _Fract"),
4112+
FractULong (b"DRm", "unsigned long _Fract"),
4113+
SatAccumShort (b"DSDAs", "_Sat short _Accum"),
4114+
SatAccumUShort (b"DSDAt", "_Sat unsigned short _Accum"),
4115+
SatAccum (b"DSDAi", "_Sat _Accum"),
4116+
SatAccumUnsigned (b"DSDAj", "_Sat unsigned _Accum"),
4117+
SatAccumLong (b"DSDAl", "_Sat long _Accum"),
4118+
SatAccumULong (b"DSDAm", "_Sat unsigned long _Accum"),
4119+
SatFractShort (b"DSDRs", "_Sat short _Fract"),
4120+
SatFractUShort (b"DSDRt", "_Sat unsigned short _Fract"),
4121+
SatFract (b"DSDRi", "_Sat _Fract"),
4122+
SatFractUnsigned (b"DSDRj", "_Sat unsigned _Fract"),
4123+
SatFractLong (b"DSDRl", "_Sat long _Fract"),
4124+
SatFractULong (b"DSDRm", "_Sat unsigned long _Fract")
40924125
}
40934126
}
40944127

tests/tests.rs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -617,6 +617,32 @@ demangles!(
617617
"deluge::gui::menu_item::MasterTranspose::MenuItem(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)"
618618
);
619619

620+
// fixed-point types as defined in the N1169 draft of ISO/IEC DTR 18037
621+
demangles!(_Z1fDAs, "f(short _Accum)");
622+
demangles!(_Z1fDAt, "f(unsigned short _Accum)");
623+
demangles!(_Z1fDAi, "f(_Accum)");
624+
demangles!(_Z1fDAj, "f(unsigned _Accum)");
625+
demangles!(_Z1fDAl, "f(long _Accum)");
626+
demangles!(_Z1fDAm, "f(unsigned long _Accum)");
627+
demangles!(_Z1fDRs, "f(short _Fract)");
628+
demangles!(_Z1fDRt, "f(unsigned short _Fract)");
629+
demangles!(_Z1fDRi, "f(_Fract)");
630+
demangles!(_Z1fDRj, "f(unsigned _Fract)");
631+
demangles!(_Z1fDRl, "f(long _Fract)");
632+
demangles!(_Z1fDRm, "f(unsigned long _Fract)");
633+
demangles!(_Z1fDSDAs, "f(_Sat short _Accum)");
634+
demangles!(_Z1fDSDAt, "f(_Sat unsigned short _Accum)");
635+
demangles!(_Z1fDSDAi, "f(_Sat _Accum)");
636+
demangles!(_Z1fDSDAj, "f(_Sat unsigned _Accum)");
637+
demangles!(_Z1fDSDAl, "f(_Sat long _Accum)");
638+
demangles!(_Z1fDSDAm, "f(_Sat unsigned long _Accum)");
639+
demangles!(_Z1fDSDRs, "f(_Sat short _Fract)");
640+
demangles!(_Z1fDSDRt, "f(_Sat unsigned short _Fract)");
641+
demangles!(_Z1fDSDRi, "f(_Sat _Fract)");
642+
demangles!(_Z1fDSDRj, "f(_Sat unsigned _Fract)");
643+
demangles!(_Z1fDSDRl, "f(_Sat long _Fract)");
644+
demangles!(_Z1fDSDRm, "f(_Sat unsigned long _Fract)");
645+
620646
// This symbol previously ran into some mutual recursion and unbounded growth of the substitution table.
621647
// See <https://github.com/gimli-rs/cpp_demangle/issues/277> and <https://github.com/getsentry/symbolic/issues/477>
622648
#[test]

0 commit comments

Comments
 (0)