From 4cdabbb4c6dd7fe2eb6c009a478ff6c80e41f5d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Van=20Canneyt?= Date: Fri, 12 Apr 2024 17:58:59 +0200 Subject: [PATCH] * Fix writing of union types --- packages/webidl/src/webidltopas.pp | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/packages/webidl/src/webidltopas.pp b/packages/webidl/src/webidltopas.pp index 831914b960..04a4cae2f0 100644 --- a/packages/webidl/src/webidltopas.pp +++ b/packages/webidl/src/webidltopas.pp @@ -1225,7 +1225,7 @@ end; procedure TBaseWebIDLToPas.WriteUnionDef(aDef: TIDLUnionTypeDefDefinition); Var - S: UTF8String; + aLine,S: UTF8String; D: TIDLDefinition; begin S:=''; @@ -1236,7 +1236,10 @@ begin S:=S+(D as TIDLTypeDefDefinition).TypeName; end; Comment('Union of '+S); - AddLn(GetName(aDef)+' = '+GetPascalTypeName('any')+';'); + aLine:=GetName(aDef)+' = '+GetPascalTypeName('any')+';'; + if aLine = 'Variant = Variant;' then + Writeln('Oh-oh'); + AddLn(aLine); end; @@ -1917,6 +1920,14 @@ begin Result:=CreatePasData(EscapeKeyWord(CN),D,true); D.Data:=Result; AllocatePasNames((D as TIDLDictionaryDefinition).Members,D.Name); + end + else if D Is TIDLDictionaryMemberDefinition then + begin + CN:=StringReplace(CN,'-','_',[rfReplaceAll]); + Result:=CreatePasData(EscapeKeyWord(CN),D,true); + D.Data:=Result; + AllocatePasName((D as TIDLDictionaryMemberDefinition).MemberType,ParentName+'_'+D.Name); + end else if D Is TIDLSequenceTypeDefDefinition then begin @@ -1939,7 +1950,11 @@ begin end else if D Is TIDLUnionTypeDefDefinition then begin - CN:=GetTypeName(TIDLUnionTypeDefDefinition(D)); + // This happens when there is an inline type declaration in a function definition. + if CN='' then + CN:=TypePrefix+ParentName+'_Type' + else + CN:=TypePrefix+CN; sDef:=FindGlobalDef(CN); if (SDef=Nil) or (sDef.Data=Nil) then begin