webidl: wasmjob: rename conflicting arg names

This commit is contained in:
mattias 2022-07-21 11:03:38 +02:00
parent f1a6d97765
commit 368289d5d8

View File

@ -34,7 +34,7 @@ Type
SrcFile: string;
Resolved: TIDLDefinition;
Constructor Create(APasName: String; D: TIDLBaseObject);
Property PasName: String read FPasName;
Property PasName: String read FPasName write FPasName;
end;
TPasDataClass = class of TPasData;
@ -266,7 +266,7 @@ end;
function TBaseWebIDLToPas.GetName(ADef: TIDLDefinition): String;
begin
If Assigned(ADef) and (TObject(ADef.Data) is TPasData) then
If Assigned(ADef) and (ADef.Data is TPasData) then
Result:=TPasData(ADef.Data).PasName
else
Result:=ADef.Name;
@ -560,6 +560,30 @@ Var
L.Add(NewName,Def);
end;
procedure CheckRenameArgs(Func: TIDLFunctionDefinition);
var
i: Integer;
Arg: TIDLArgumentDefinition;
ArgName: String;
ConflictDef: TIDLDefinition;
begin
for i:=0 to Func.Arguments.Count-1 do
begin
Arg:=Func.Argument[i];
ArgName:=GetName(Arg);
repeat
ConflictDef:=TIDLDefinition(L.Items[ArgName]);
if (ConflictDef=Nil) then break;
// name conflict -> rename
if ArgName[1]<>'a' then
ArgName:='a'+ArgName
else
ArgName:='_'+ArgName;
(Arg.Data as TPasData).PasName:=ArgName;
until false;
end;
end;
var
D: TIDLDefinition;
begin
@ -571,6 +595,9 @@ begin
For D in ML Do
if (D is TIDLConstDefinition) then
CheckRename(D);
For D in ML Do
if D is TIDLFunctionDefinition then
CheckRenameArgs(TIDLFunctionDefinition(D));
finally
L.Free;
end;