[cfe-dev] [libc++abi] Why is cxa_demangle.h a public header?

Howard Hinnant hhinnant at apple.com
Sat Jun 8 16:10:59 PDT 2013


On Jun 8, 2013, at 6:28 PM, Matthew Dempsky <matthew at dempsky.org> wrote:

> On Sat, Jun 8, 2013 at 8:02 AM, Howard Hinnant <hhinnant at apple.com> wrote:
>> Because when I was first asked to write the demangler I was also asked to have it create a syntax tree and expose that syntax tree for use by the compiler and/or debugger.
>> 
>> That design hasn't worked out.  I'm currently working on an alternative.  A tool for the compiler and/or debugger could still be done, but it makes more sense to have that be a separate tool, as opposed to bundling it into the demangler.
> 
> Makes sense.  Thanks for the explanation!
> 
>> I'm hoping to get rid of this shortly.
> 
> Do you have a timeline for this or any notes about your new plans?  Is
> it still worth sending patches against the current code?

Days not weeks.  I haven't looked at your patches yet, but they are registered on my to-do list which has gotten rather lengthy while I work on the demangler.

The parsing code is staying approximately the same, modulo bug fixes and C++11 additions.  Everything having to do with the syntax tree (everything derived from __node) is gone.  Instead the parsing is generating a stack of pairs of strings.  At parsing end the stack should be size 1, and the concatenation of the two strings in the pair is the demangled string.

The pair exists to aid demangling references/pointers to functions/arrays.  The functions/arrays demangle into a first part and second part, and pointers/references get inserted in between the two parts.

Parameter packs demangle to a stack of string_pairs of length 0 or more.

Substitutions are stored as a vector of stacks of string pairs.  This is necessary to properly store a parameter pack as a substitution.

Template parameters are stored as a stack of substitutions.

What would help most right now is code examples which mangle names which the current demangler does not handle.  For example I am currently creating a code example that will mangle an expression involving nullptr.

Howard




More information about the cfe-dev mailing list