mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-14 19:49:09 +02:00
webidl: resolve typedef in args and resulttypes
This commit is contained in:
parent
2076f200de
commit
f8c49c4a1f
@ -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
|
||||
|
@ -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));
|
||||
|
Loading…
Reference in New Issue
Block a user