Browse Source

webidl: resolve typedef in args and resulttypes

mattias 3 years ago
parent
commit
f8c49c4a1f
2 changed files with 15 additions and 3 deletions
  1. 13 1
      packages/webidl/src/webidltopas.pp
  2. 2 2
      packages/webidl/src/webidltowasmjob.pp

+ 13 - 1
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

+ 2 - 2
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));