* 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 For I in aList do
begin begin
ArgName:=GetName(Arg); ArgName:=GetName(Arg);
if IsKeyWord(ArgName) then
ArgName:=ArgName+'_';
ArgType:=GetResolvedType(Arg.ArgumentType,ArgTypeName,ArgResolvedTypeName); ArgType:=GetResolvedType(Arg.ArgumentType,ArgTypeName,ArgResolvedTypeName);
ArgName:=ArgName+': '+ArgTypeName; ArgName:=ArgName+': '+ArgTypeName;
//writeln('TBaseWebIDLToPas.GetArguments Arg="',ArgName,'" A.ArgumentType.TypeName=',Arg.ArgumentType.TypeName,' ',Def<>nil); //writeln('TBaseWebIDLToPas.GetArguments Arg="',ArgName,'" A.ArgumentType.TypeName=',Arg.ArgumentType.TypeName,' ',Def<>nil);

View File

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