From 513a461911bf98d9737de16f59576b8cfdb9b66a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Van=20Canneyt?= Date: Tue, 9 Apr 2024 18:08:19 +0200 Subject: [PATCH] * Guard against argument names that are keywords --- packages/webidl/src/webidltopas.pp | 2 ++ packages/webidl/src/webidltowasmjob.pp | 20 ++++++++++++++++---- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/packages/webidl/src/webidltopas.pp b/packages/webidl/src/webidltopas.pp index 4006b62fc8..5cbb37274b 100644 --- a/packages/webidl/src/webidltopas.pp +++ b/packages/webidl/src/webidltopas.pp @@ -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); diff --git a/packages/webidl/src/webidltowasmjob.pp b/packages/webidl/src/webidltowasmjob.pp index b1916d4483..4969e0c446 100644 --- a/packages/webidl/src/webidltowasmjob.pp +++ b/packages/webidl/src/webidltowasmjob.pp @@ -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;