dexed/src/u_ddemangle.pas

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.