demangle

Demangle D mangled names.

@safe pure nothrow
string
demangle
(
string name
)

Parameters

name string

the mangled name

Return Value

Type: string

A string. If it is not a D mangled name, it returns its argument name.

Examples

// int b in module a
assert(demangle("_D1a1bi") == "int a.b");
// char array foo in module test
assert(demangle("_D4test3fooAa") == "char[] test.foo");

This program reads standard in and writes it to standard out, pretty-printing any found D mangled names.

import std.ascii : isAlphaNum;
import std.algorithm.iteration : chunkBy, joiner, map;
import std.algorithm.mutation : copy;
import std.conv : to;
import std.demangle : demangle;
import std.functional : pipe;
import std.stdio : stdin, stdout;

void main()
{
    stdin.byLineCopy
        .map!(
            l => l.chunkBy!(a => isAlphaNum(a) || a == '_')
                  .map!(a => a[1].pipe!(to!string, demangle)).joiner
        )
        .copy(stdout.lockingTextWriter);
}

Meta