Here are some examples that are not demangled by std.demangle.demangle :

_D13libd_demangle12__ModuleInfoZ
_D15TypeInfo_Struct6__vtblZ
_D3std5stdio12__ModuleInfoZ
_D3std6traits15__T8DemangleTkZ8Demangle6__initZ
_D47TypeInfo_S3std6traits15__T8DemangleTkZ8Demangle6__initZ

demangle is currently designed to demangle functions names, while the strings above are types. During parsing, demangle sees the string as a qualified name and then expects a type, and when it doesn't find one it figures the symbol isn't valid. It sounds like we either need a separate function for demangling types or if the demangle function encounters a 'Z' when it expects a type name it should realize it's demangling a type name, back up, and try again according to that logic.

OK, so as a practical matter, I'd like to be able to demangle these types that appear as symbols in object &c. files. Is there a simple way I can modify a mangled type such as

_D47TypeInfo_S3std6traits15__T8DemangleTkZ8Demangle6__initZ

into a mangled qualified name so it can be demangled by the existing demangle function and the result then modified into a string representing a type?

Reply via email to