inverse of std.demangle?

Adam D. Ruppe destructionator at gmail.com
Wed Jul 10 10:30:54 PDT 2013


On Wednesday, 10 July 2013 at 16:30:25 UTC, Timothee Cour wrote:
> Do you have a pointer for that function in dmd ?

The compiler doesn't do it as one function, I mean it can parse 
as string and mangle it in the process of compiling code.

To go from demangled string => mangled string, you'd first parse 
the demangled string as a declaration and turn it into a symbol, 
then mangle that symbol.


But.... if you just want to do really simple cases, maybe this 
isn't too hard. I just quickly slapped this file together:

http://arsdnet.net/dcode/mangle.d


It is very basic, but might work for a lot of cases - it handled 
some basic functions I tried. Perhaps not too hard to add support 
for more from here.

As you can see by looking at the code, the way it works is:

1) tokenize the input string (it does this in a stupid way, and 
doesn't know all of D's symbols and keywords, but it doesn't have 
to be too smart since demangle produces fairly predictable input, 
so I think it will be ok).

2) runs a simple, stupid parser to get the components of the 
function - return type, name, and arguments. To add support for 
templates, extern(C), and so on, this would need to be expanded.

3) put the pieces back together in a wholly mangled form, 
borrowing one helper array from core.demangle.



There's a main function at the bottom of the file that does one 
of the few tests I tried with it.


More information about the Digitalmars-d-learn mailing list