webidl: wasmjob: fixed idlinterface arg

This commit is contained in:
mattias 2022-07-27 23:56:55 +02:00
parent c9947b4ee6
commit becbd5411c
2 changed files with 27 additions and 23 deletions

View File

@ -1119,23 +1119,23 @@ function TBaseWebIDLToPas.GetArguments(aList: TIDLDefinitionList;
ForceBrackets: Boolean): String; ForceBrackets: Boolean): String;
Var Var
I, Def: TIDLDefinition; I, ArgType: TIDLDefinition;
Arg: TIDLArgumentDefinition absolute I; Arg: TIDLArgumentDefinition absolute I;
ArgName, aTypeName: string; ArgName, ArgTypeName, ArgResolvedTypeName: string;
begin begin
Result:=''; Result:='';
For I in aList do For I in aList do
begin begin
ArgName:=GetName(Arg); ArgName:=GetName(Arg);
aTypeName:=GetTypeName(Arg.ArgumentType); ArgType:=GetResolvedType(Arg.ArgumentType,ArgTypeName,ArgResolvedTypeName);
ArgName:=ArgName+': '+aTypeName; ArgName:=ArgName+': '+ArgTypeName;
Def:=FindGlobalDef(Arg.ArgumentType.TypeName);
//writeln('TBaseWebIDLToPas.GetArguments Arg="',ArgName,'" A.ArgumentType.TypeName=',Arg.ArgumentType.TypeName,' ',Def<>nil); //writeln('TBaseWebIDLToPas.GetArguments Arg="',ArgName,'" A.ArgumentType.TypeName=',Arg.ArgumentType.TypeName,' ',Def<>nil);
if (Def is TIDLFunctionDefinition) if (ArgType is TIDLFunctionDefinition)
or (Def is TIDLDictionaryDefinition) or (ArgType is TIDLDictionaryDefinition)
or (Arg.ArgumentType.TypeName='sequence') or (ArgType is TIDLSequenceTypeDefDefinition)
or SameText(aTypeName,'UnicodeString') then or (ArgResolvedTypeName='UnicodeString')
or (ArgResolvedTypeName='UTF8String') then
ArgName:='const '+ArgName; ArgName:='const '+ArgName;
if Result<>'' then if Result<>'' then
Result:=Result+'; '; Result:=Result+'; ';

View File

@ -78,6 +78,8 @@ type
function GetTypeName(const aTypeName: String; ForTypeDef: Boolean=False function GetTypeName(const aTypeName: String; ForTypeDef: Boolean=False
): String; override; ): String; override;
function GetPasIntfName(Intf: TIDLDefinition): string; function GetPasIntfName(Intf: TIDLDefinition): string;
function GetResolvedType(aDef: TIDLTypeDefDefinition; out aTypeName,
aResolvedTypename: string): TIDLDefinition; overload; override;
function GetInterfaceDefHead(Intf: TIDLInterfaceDefinition): String; function GetInterfaceDefHead(Intf: TIDLInterfaceDefinition): String;
override; override;
function GetDictionaryDefHead(const CurClassName: string; function GetDictionaryDefHead(const CurClassName: string;
@ -267,6 +269,14 @@ begin
Result:=GetPasClassName(Result); Result:=GetPasClassName(Result);
end; end;
function TWebIDLToPasWasmJob.GetResolvedType(aDef: TIDLTypeDefDefinition; out
aTypeName, aResolvedTypename: string): TIDLDefinition;
begin
Result:=inherited GetResolvedType(aDef, aTypeName, aResolvedTypename);
if Result is TIDLInterfaceDefinition then
aTypeName:=GetPasClassName(aTypeName);
end;
function TWebIDLToPasWasmJob.GetInterfaceDefHead(Intf: TIDLInterfaceDefinition function TWebIDLToPasWasmJob.GetInterfaceDefHead(Intf: TIDLInterfaceDefinition
): String; ): String;
var var
@ -502,10 +512,7 @@ begin
if ReturnDef is TIDLSequenceTypeDefDefinition then if ReturnDef is TIDLSequenceTypeDefDefinition then
InvokeClassName:=ClassPrefix+'Array'+ClassSuffix InvokeClassName:=ClassPrefix+'Array'+ClassSuffix
else if ReturnDef is TIDLInterfaceDefinition then else if ReturnDef is TIDLInterfaceDefinition then
begin InvokeClassName:=GetName(ReturnDef)
InvokeClassName:=ReturnTypeName;
ReturnTypeName:=GetPasIntfName(ReturnDef);
end
else if ResolvedReturnTypeName=PasInterfacePrefix+'Object'+PasInterfaceSuffix then else if ResolvedReturnTypeName=PasInterfacePrefix+'Object'+PasInterfaceSuffix then
begin begin
InvokeClassName:=ClassPrefix+'Object'+ClassSuffix; InvokeClassName:=ClassPrefix+'Object'+ClassSuffix;
@ -572,9 +579,7 @@ begin
writeln('Hint: TWebIDLToPasWasmJob.WriteFunctionDefinition sequence of ',ArgTypeName); writeln('Hint: TWebIDLToPasWasmJob.WriteFunctionDefinition sequence of ',ArgTypeName);
raise EConvertError.Create('[20220725172246] not yet supported: passing an array of '+ArgTypeName+' as argument at '+GetDefPos(ArgDef)); raise EConvertError.Create('[20220725172246] not yet supported: passing an array of '+ArgTypeName+' as argument at '+GetDefPos(ArgDef));
end end
else else if (ArgType is TIDLFunctionDefinition) and (foCallBack in TIDLFunctionDefinition(ArgType).Options) then
begin
if (ArgType is TIDLFunctionDefinition) and (foCallBack in TIDLFunctionDefinition(ArgType).Options) then
begin begin
LocalName:=CreateLocal('m'); LocalName:=CreateLocal('m');
VarSection:=VarSection+' '+LocalName+': '+JOB_JSValueTypeNames[jivkMethod]+';'+sLineBreak; VarSection:=VarSection+' '+LocalName+': '+JOB_JSValueTypeNames[jivkMethod]+';'+sLineBreak;
@ -583,7 +588,6 @@ begin
FinallyCode:=FinallyCode+' '+LocalName+'.free;'+sLineBreak; FinallyCode:=FinallyCode+' '+LocalName+'.free;'+sLineBreak;
ArgName:=LocalName; ArgName:=LocalName;
end; end;
end;
Args:=Args+ArgName; Args:=Args+ArgName;
end; end;
Args:=',['+Args+']'; Args:=',['+Args+']';