* Guard against argument names that are keywords

This commit is contained in:
Michaël Van Canneyt 2024-04-09 18:08:19 +02:00
parent 972703ab45
commit 513a461911
2 changed files with 18 additions and 4 deletions

View File

@ -1350,6 +1350,8 @@ begin
For I in aList do
begin
ArgName:=GetName(Arg);
if IsKeyWord(ArgName) then
ArgName:=ArgName+'_';
ArgType:=GetResolvedType(Arg.ArgumentType,ArgTypeName,ArgResolvedTypeName);
ArgName:=ArgName+': '+ArgTypeName;
//writeln('TBaseWebIDLToPas.GetArguments Arg="',ArgName,'" A.ArgumentType.TypeName=',Arg.ArgumentType.TypeName,' ',Def<>nil);

View File

@ -74,6 +74,7 @@ type
FPasInterfacePrefix: TIDLString;
FPasInterfaceSuffix: TIDLString;
FGeneratingInterface : Boolean;
function GetArgName(d: TIDLDefinition): string;
function GetFunctionSuffix(aDef: TIDLFunctionDefinition; Overloads: TFPObjectList): String;
function GetInvokeClassName(aResultDef: TIDLDefinition; aName: TIDLString; aDef: TIDLFunctionDefinition=nil): TIDLString;
function GetInvokeNameFromTypeName(aTypeName: TIDLString; aType: TIDLDefinition): TIDLString;
@ -515,11 +516,13 @@ end;
function TWebIDLToPasWasmJob.WriteForwardClassDef(D: TIDLStructuredDefinition
): Boolean;
begin
if D.IsPartial then
exit;
if D is TIDLDictionaryDefinition then
AddLn(GetName(D)+' = '+JOB_JSValueTypeNames[jjvkDictionary]+';')
else
begin
if (not D.IsPartial) and ((D is TIDLInterfaceDefinition) or (D is TIDLNamespaceDefinition)) then
if ((D is TIDLInterfaceDefinition) or (D is TIDLNamespaceDefinition)) then
AddLn(GetPasIntfName(D)+' = interface;');
Result:=inherited WriteForwardClassDef(D);
end;
@ -535,6 +538,7 @@ begin
'SmallInt',
'Word',
'Integer': Result:='InvokeJSLongIntResult';
'DOMHighResTimeStamp',
'LongWord',
'Int64',
'QWord': Result:='InvokeJSMaxIntResult';
@ -647,6 +651,13 @@ begin
Result:=Result+' // Promise<'+TIDLPromiseTypeDefDefinition(aReturnDef).ReturnType.TypeName+'>';
end;
function TWebIDLToPasWasmJob.GetArgName(d : TIDLDefinition) : string;
begin
Result:=GetName(d);
if IsKeyWord(Result) then
Result:=Result+'_';
end;
procedure TWebIDLToPasWasmJob.WriteFunctionImplementation(aParent: TIDLStructuredDefinition; aDef: TIDLFunctionDefinition);
var
@ -666,6 +677,7 @@ var
ArgNames.Add(Result);
end;
Var
Data: TPasDataWasmJob;
FuncName, Suff, Args, ProcKind, Sig, aClassName, InvokeName,
@ -701,7 +713,7 @@ begin
ArgNames:=TStringList.Create;
try
for CurDef in ArgDefList do
ArgNames.Add(GetName(ArgDef));
ArgNames.Add(GetArgName(ArgDef));
AddLn(ProcKind+' '+aClassName+'.'+Sig);
@ -716,7 +728,7 @@ begin
begin
if Args<>'' then
Args:=Args+',';
ArgName:=GetName(ArgDef);
ArgName:=GetArgName(ArgDef);
ArgType:=GetResolvedType(ArgDef.ArgumentType,ArgTypeName,ArgResolvedTypeName);
//writeln('TWebIDLToPasWasmJob.WriteFunctionDefinition ',ArgType.Name,':',ArgType.ClassName,' ',ArgResolvedTypeName,' ArgType=',hexstr(ptruint(ArgType),sizeof(ptruint)*2));
if ArgType is TIDLSequenceTypeDefDefinition then
@ -871,7 +883,6 @@ Var
FD: TIDLFunctionDefinition absolute D;
begin
for D in aList do
if D is TIDLFunctionDefinition then
begin
@ -1020,6 +1031,7 @@ begin
end;
end;
AddLn(GetFunc);
undent;
AddLn('end;');
finally
end;