webidl: resolve typedef in args and resulttypes

This commit is contained in:
mattias 2022-07-18 17:48:51 +02:00
parent 2076f200de
commit f8c49c4a1f
2 changed files with 15 additions and 3 deletions

View File

@ -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

View File

@ -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));