diff --git a/packages/webidl/src/webidltopas.pp b/packages/webidl/src/webidltopas.pp index f4107d0f55..0999bf0c8e 100644 --- a/packages/webidl/src/webidltopas.pp +++ b/packages/webidl/src/webidltopas.pp @@ -108,6 +108,7 @@ type function GetPasClassName(const aName: string): string; overload; virtual; function GetTypeName(Const aTypeName: String; ForTypeDef: Boolean=False): String; overload; virtual; function GetTypeName(aTypeDef: TIDLTypeDefDefinition; ForTypeDef: Boolean=False): String; overload; virtual; + function GetResolvedTypeName(Const aTypeName: String): String; overload; virtual; function GetSequenceTypeName(Seq: TIDLSequenceTypeDefDefinition; ForTypeDef: Boolean=False): string; virtual; function GetInterfaceDefHead(Intf: TIDLInterfaceDefinition): String; virtual; function GetDictionaryDefHead(const CurClassName: string; Dict: TIDLDictionaryDefinition): String; virtual; @@ -718,6 +719,17 @@ begin Result:=GetTypeName(aTypeDef.TypeName,ForTypeDef); end; +function TBaseWebIDLToPas.GetResolvedTypeName(const aTypeName: String): String; +var + aDef: TIDLDefinition; +begin + aDef:=FindGlobalDef(aTypeName); + if aDef is TIDLTypeDefDefinition then + Result:=GetResolvedTypeName(TIDLTypeDefDefinition(aDef).TypeName) + else + Result:=GetTypeName(aTypeName); +end; + function TBaseWebIDLToPas.GetSequenceTypeName( Seq: TIDLSequenceTypeDefDefinition; ForTypeDef: Boolean): string; begin @@ -1401,7 +1413,7 @@ Var aData: TPasData; begin - writeln('BBB1 TBaseWebIDLToPas.AllocatePasName ',ParentName,'.',D.Name,':',D.ClassName); + //writeln('TBaseWebIDLToPas.AllocatePasName ',ParentName,'.',D.Name,':',D.ClassName); CN:=D.Name; if D Is TIDLInterfaceDefinition then begin diff --git a/packages/webidl/src/webidltowasmjob.pp b/packages/webidl/src/webidltowasmjob.pp index 939d6894ae..18e49e6ec8 100644 --- a/packages/webidl/src/webidltowasmjob.pp +++ b/packages/webidl/src/webidltowasmjob.pp @@ -565,7 +565,7 @@ var begin Result:=True; FN:=GetName(aDef); - RT:=GetTypeName(aDef.ReturnType,False); + RT:=GetResolvedTypeName(aDef.ReturnType.TypeName); if (RT='void') then RT:=''; ReturnDef:=FindGlobalDef(aDef.ReturnType.TypeName); @@ -600,7 +600,7 @@ begin while ArgNames.IndexOf(ArgName+IntToStr(j))>=0 do inc(j); ArgName:=ArgName+IntToStr(j); end; - ArgTypeName:=GetTypeName(ArgDef.ArgumentType); + ArgTypeName:=GetResolvedTypeName(ArgDef.ArgumentType.TypeName); case ArgTypeName of '': raise EWebIDLParser.Create('not yet supported: function type arg['+IntToStr(I)+'] type void at '+GetDefPos(ArgDef));