From d9e156e90e5a33aeba270962ebc16ea1c103223d Mon Sep 17 00:00:00 2001 From: mattias <nc-gaertnma@netcologne.de> Date: Fri, 8 Jul 2022 11:03:30 +0200 Subject: [PATCH] webidl: wasmjob: error on passing not supported array as argument --- packages/webidl/src/webidltowasmjob.pp | 28 +++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/packages/webidl/src/webidltowasmjob.pp b/packages/webidl/src/webidltowasmjob.pp index 489d67853b..235bb5aa5c 100644 --- a/packages/webidl/src/webidltowasmjob.pp +++ b/packages/webidl/src/webidltowasmjob.pp @@ -404,7 +404,7 @@ Var Data: TPasDataWasmJob; FN, RT, Suff, Args, ProcKind, Sig, aClassName, Code, InvokeName, InvokeCode, ArgName, TryCode, VarSection, FinallyCode, LocalName, - WrapperFn: String; + WrapperFn, ArgTypeName: String; Overloads: TFPObjectList; I: Integer; AddFuncBody: Boolean; @@ -494,15 +494,25 @@ begin if Args<>'' then Args:=Args+','; ArgName:=GetName(ArgDef); - ArgType:=FindGlobalDef(ArgDef.ArgumentType.TypeName); - if (ArgType is TIDLFunctionDefinition) and (foCallBack in TIDLFunctionDefinition(ArgType).Options) then + if ArgDef.ArgumentType is TIDLSequenceTypeDefDefinition 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; + ArgTypeName:=TIDLSequenceTypeDefDefinition(ArgDef.ArgumentType).ElementType.TypeName; + ArgType:=FindGlobalDef(ArgTypeName); + writeln('TWebIDLToPasWasmJob.WriteFunctionDefinition sequence of ',ArgTypeName,' Element=',ArgType<>nil); + raise EConvertError.Create('not yet supported: passing an array of '+ArgTypeName+' as argument at '+GetDefPos(ArgDef)); + end + else + begin + ArgType:=FindGlobalDef(ArgDef.ArgumentType.TypeName); + 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; end; Args:=Args+ArgName; end;