mirror of https://gitlab.com/basile.b/dexed.git
49 lines
924 B
Plaintext
49 lines
924 B
Plaintext
unit u_ddemangle;
|
|
|
|
{$I u_defines.inc}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, process, forms,
|
|
u_dexed_d;
|
|
|
|
// demangle a D name
|
|
function demangle(const value: string): string;
|
|
// demangle a list of D names
|
|
procedure demangle(values, output: TStrings);
|
|
|
|
implementation
|
|
|
|
function demangle(const value: string): string;
|
|
var
|
|
s: pchar;
|
|
begin
|
|
if (value.Length > 0) and (pos('_D', value) > 0) then
|
|
begin
|
|
s := pchar(value);
|
|
// note, assign to result has for effect to alloc a FPC string
|
|
// (by implicit convertion) so the D memory is not used.
|
|
result := string(ddemangle(s));
|
|
minimizeGcHeap();
|
|
end
|
|
else
|
|
result := value;
|
|
end;
|
|
|
|
procedure demangle(values, output: TStrings);
|
|
var
|
|
i: integer;
|
|
value: string;
|
|
begin
|
|
for i := 0 to values.Count-1 do
|
|
begin
|
|
value := values[i];
|
|
if pos('_D', value) > 0 then
|
|
value := demangle(PChar(value));
|
|
output.AddStrings(value);
|
|
end;
|
|
end;
|
|
|
|
end.
|