mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-22 07:09:29 +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;
|
||||
|
||||
Var
|
||||
I, Def: TIDLDefinition;
|
||||
I, ArgType: TIDLDefinition;
|
||||
Arg: TIDLArgumentDefinition absolute I;
|
||||
ArgName, aTypeName: string;
|
||||
ArgName, ArgTypeName, ArgResolvedTypeName: string;
|
||||
|
||||
begin
|
||||
Result:='';
|
||||
For I in aList do
|
||||
begin
|
||||
ArgName:=GetName(Arg);
|
||||
aTypeName:=GetTypeName(Arg.ArgumentType);
|
||||
ArgName:=ArgName+': '+aTypeName;
|
||||
Def:=FindGlobalDef(Arg.ArgumentType.TypeName);
|
||||
ArgType:=GetResolvedType(Arg.ArgumentType,ArgTypeName,ArgResolvedTypeName);
|
||||
ArgName:=ArgName+': '+ArgTypeName;
|
||||
//writeln('TBaseWebIDLToPas.GetArguments Arg="',ArgName,'" A.ArgumentType.TypeName=',Arg.ArgumentType.TypeName,' ',Def<>nil);
|
||||
if (Def is TIDLFunctionDefinition)
|
||||
or (Def is TIDLDictionaryDefinition)
|
||||
or (Arg.ArgumentType.TypeName='sequence')
|
||||
or SameText(aTypeName,'UnicodeString') then
|
||||
if (ArgType is TIDLFunctionDefinition)
|
||||
or (ArgType is TIDLDictionaryDefinition)
|
||||
or (ArgType is TIDLSequenceTypeDefDefinition)
|
||||
or (ArgResolvedTypeName='UnicodeString')
|
||||
or (ArgResolvedTypeName='UTF8String') then
|
||||
ArgName:='const '+ArgName;
|
||||
if Result<>'' then
|
||||
Result:=Result+'; ';
|
||||
|
@ -78,6 +78,8 @@ type
|
||||
function GetTypeName(const aTypeName: String; ForTypeDef: Boolean=False
|
||||
): String; override;
|
||||
function GetPasIntfName(Intf: TIDLDefinition): string;
|
||||
function GetResolvedType(aDef: TIDLTypeDefDefinition; out aTypeName,
|
||||
aResolvedTypename: string): TIDLDefinition; overload; override;
|
||||
function GetInterfaceDefHead(Intf: TIDLInterfaceDefinition): String;
|
||||
override;
|
||||
function GetDictionaryDefHead(const CurClassName: string;
|
||||
@ -267,6 +269,14 @@ begin
|
||||
Result:=GetPasClassName(Result);
|
||||
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
|
||||
): String;
|
||||
var
|
||||
@ -502,10 +512,7 @@ begin
|
||||
if ReturnDef is TIDLSequenceTypeDefDefinition then
|
||||
InvokeClassName:=ClassPrefix+'Array'+ClassSuffix
|
||||
else if ReturnDef is TIDLInterfaceDefinition then
|
||||
begin
|
||||
InvokeClassName:=ReturnTypeName;
|
||||
ReturnTypeName:=GetPasIntfName(ReturnDef);
|
||||
end
|
||||
InvokeClassName:=GetName(ReturnDef)
|
||||
else if ResolvedReturnTypeName=PasInterfacePrefix+'Object'+PasInterfaceSuffix then
|
||||
begin
|
||||
InvokeClassName:=ClassPrefix+'Object'+ClassSuffix;
|
||||
@ -572,17 +579,14 @@ begin
|
||||
writeln('Hint: TWebIDLToPasWasmJob.WriteFunctionDefinition sequence of ',ArgTypeName);
|
||||
raise EConvertError.Create('[20220725172246] not yet supported: passing an array of '+ArgTypeName+' as argument at '+GetDefPos(ArgDef));
|
||||
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
|
||||
LocalName:=CreateLocal('m');
|
||||
VarSection:=VarSection+' '+LocalName+': '+JOB_JSValueTypeNames[jivkMethod]+';'+sLineBreak;
|
||||
WrapperFn:='JOBCall'+GetName(TIDLFunctionDefinition(ArgType));
|
||||
TryCode:=TryCode+' '+LocalName+':='+JOB_JSValueTypeNames[jivkMethod]+'.Create(TMethod('+ArgName+'),@'+WrapperFn+');'+sLineBreak;
|
||||
FinallyCode:=FinallyCode+' '+LocalName+'.free;'+sLineBreak;
|
||||
ArgName:=LocalName;
|
||||
end;
|
||||
LocalName:=CreateLocal('m');
|
||||
VarSection:=VarSection+' '+LocalName+': '+JOB_JSValueTypeNames[jivkMethod]+';'+sLineBreak;
|
||||
WrapperFn:='JOBCall'+GetName(TIDLFunctionDefinition(ArgType));
|
||||
TryCode:=TryCode+' '+LocalName+':='+JOB_JSValueTypeNames[jivkMethod]+'.Create(TMethod('+ArgName+'),@'+WrapperFn+');'+sLineBreak;
|
||||
FinallyCode:=FinallyCode+' '+LocalName+'.free;'+sLineBreak;
|
||||
ArgName:=LocalName;
|
||||
end;
|
||||
Args:=Args+ArgName;
|
||||
end;
|
||||
|
Loading…
Reference in New Issue
Block a user