mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-18 16:49:20 +02:00
webidl: wasmjob: fixed idlinterface arg
This commit is contained in:
parent
c9947b4ee6
commit
becbd5411c
@ -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+'; ';
|
||||||
|
@ -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+']';
|
||||||
|
Loading…
Reference in New Issue
Block a user