From 9b1d5ef92a2abfe43fe2df53ca8f054c465f9f19 Mon Sep 17 00:00:00 2001 From: mattias <nc-gaertnma@netcologne.de> Date: Mon, 25 Jul 2022 18:49:45 +0200 Subject: [PATCH] webidl: nicer error messages, fixed function returning Object --- packages/webidl/src/webidltopas.pp | 6 ++++++ packages/webidl/src/webidltowasmjob.pp | 18 +++++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/packages/webidl/src/webidltopas.pp b/packages/webidl/src/webidltopas.pp index b14d8ce7d5..e238474c6a 100644 --- a/packages/webidl/src/webidltopas.pp +++ b/packages/webidl/src/webidltopas.pp @@ -278,6 +278,8 @@ end; function TBaseWebIDLToPas.GetPasClassName(const aName: string): string; begin + if aName='' then + raise EConvertError.Create('[20220725184209] empty name'); Result:=ClassPrefix+aName+ClassSuffix; end; @@ -1499,6 +1501,8 @@ begin CN:=D.Name; if D Is TIDLInterfaceDefinition then begin + if CN='' then + raise EConvertError.Create('[20220725184324] at '+GetDefPos(D)); if not TIDLInterfaceDefinition(D).IsPartial then AddJSIdentifier(D); CN:=ClassPrefix+CN+ClassSuffix; @@ -1508,6 +1512,8 @@ begin end else if D Is TIDLDictionaryDefinition then begin + if CN='' then + raise EConvertError.Create('[20220725184410] at '+GetDefPos(D)); if not TIDLDictionaryDefinition(D).IsPartial then AddJSIdentifier(D); if coDictionaryAsClass in BaseOptions then diff --git a/packages/webidl/src/webidltowasmjob.pp b/packages/webidl/src/webidltowasmjob.pp index 45eaf4eb27..0e44e8d2da 100644 --- a/packages/webidl/src/webidltowasmjob.pp +++ b/packages/webidl/src/webidltowasmjob.pp @@ -143,6 +143,8 @@ begin and (RightStr(Result,length(ClassSuffix))=ClassSuffix) then Result:=copy(Result,length(ClassPrefix)+1,length(Result)-length(ClassPrefix)-length(ClassSuffix)); + if Result='' then + raise EConvertError.Create('[20220725184518]'); Result:=PasInterfacePrefix+Result+PasInterfaceSuffix; end; @@ -153,6 +155,8 @@ begin and (RightStr(Result,length(PasInterfaceSuffix))=PasInterfaceSuffix) then Result:=copy(Result,length(PasInterfacePrefix)+1,length(Result)-length(PasInterfacePrefix)-length(PasInterfaceSuffix)); + if Result='' then + raise EConvertError.Create('[20220725184440]'); Result:=ClassPrefix+Result+ClassSuffix; end; @@ -244,13 +248,20 @@ begin and (LeftStr(Result,length(PasInterfacePrefix))<>PasInterfacePrefix) and (RightStr(Result,length(PasInterfaceSuffix))<>PasInterfaceSuffix) then + begin + if Result='' then + raise EConvertError.Create('[20220725184536]'); Result:=PasInterfacePrefix+Result+PasInterfaceSuffix; + end; end; end; function TWebIDLToPasWasmJob.GetPasIntfName(Intf: TIDLDefinition): string; begin - Result:=GetPasClassName(GetName(Intf)); + Result:=GetName(Intf); + if Result='' then + raise EConvertError.Create('[20220725184653] missing name at '+GetDefPos(Intf)); + Result:=GetPasClassName(Result); end; function TWebIDLToPasWasmJob.GetInterfaceDefHead(Intf: TIDLInterfaceDefinition @@ -456,6 +467,7 @@ begin 'QWord': InvokeName:='InvokeJSMaxIntResult'; 'Single', 'Double': InvokeName:='InvokeJSDoubleResult'; + 'UTF8String', 'UnicodeString': InvokeName:='InvokeJSUnicodeStringResult'; 'TJOB_JSValue': InvokeName:='InvokeJSValueResult'; 'void','undefined': @@ -473,6 +485,10 @@ begin InvokeClassName:=ReturnTypeName; ReturnTypeName:=GetPasIntfName(ReturnDef); end + else if ResolvedReturnTypeName=PasInterfacePrefix+'Object'+PasInterfaceSuffix then + begin + InvokeClassName:=ClassPrefix+'Object'+ClassSuffix; + end else raise EConvertError.Create('[20220725172242] not yet supported: function return type '+ResolvedReturnTypeName+' '+ReturnDef.ClassName+' at '+GetDefPos(aDef)); end;