Browse Source

webidl: parse undefined

mattias 3 years ago
parent
commit
d3220b46d2

+ 2 - 0
packages/webidl/src/webidldefs.pp

@@ -24,6 +24,7 @@ uses
 Type
   TWebIDLBaseType = (
     wibtNone,
+    wibtUndefined,
     wibtVoid,
     wibtUnion,
     wibtAny,
@@ -72,6 +73,7 @@ Type
 const
   WebIDLBaseTypeNames: array[TWebIDLBaseType] of string = (
     '',
+    'undefined',
     'void',
     'union',
     'any',

+ 3 - 3
packages/webidl/src/webidlparser.pp

@@ -330,7 +330,7 @@ end;
 procedure TWebIDLParser.CheckCurrentTokens(aTokens: TIDLTokens);
 begin
   if Not (CurrentToken in aTokens) then
-    Error(SErrInvalidTokenList,[GetTokenNames(aTokens),CurrentTokenString]);
+    Error('[20220725174524] '+SErrInvalidTokenList,[GetTokenNames(aTokens),CurrentTokenString]);
 end;
 
 function TWebIDLParser.ExpectToken(aToken: TIDLToken): TIDLToken;
@@ -532,7 +532,7 @@ begin
          Options:=Options+[foCallBack];
        end;
   else
-    Error(SErrInvalidTokenList,[GetTokenNames([tkInterface,tkIdentifier])]);
+    Error('[20220725174529] '+SErrInvalidTokenList,[GetTokenNames([tkInterface,tkIdentifier]),CurrentTokenString]);
   end;
 end;
 
@@ -1112,7 +1112,7 @@ begin
     tkInterface : Result:=ParseInterface(aParent);
     tkDictionary : Result:=ParseDictionary(aParent);
   else
-    Error(SErrInvalidTokenList,[GetTokenNames([tkInterface,tkDictionary]),CurrentTokenString]);
+    Error('[20220725174539] '+SErrInvalidTokenList,[GetTokenNames([tkInterface,tkDictionary]),CurrentTokenString]);
   end;
   Result.IsPartial:=True;
 end;

+ 11 - 7
packages/webidl/src/webidltopas.pp

@@ -547,7 +547,7 @@ Var
           ConflictDef:=CurDef;
           inc(I);
           if I>1 then
-            raise EConvertError.Create('Duplicate identifier '+GetDefPos(Def)+' and '+GetDefPos(CurDef)+' (20220620073704)');
+            raise EConvertError.Create('[20220725172221] Duplicate identifier '+GetDefPos(Def)+' and '+GetDefPos(CurDef)+' (20220620073704)');
           NewName:=KeywordPrefix+BaseName+KeywordSuffix;
           OrigName:=KeywordPrefix+OrigName+KeywordSuffix;
           end;
@@ -819,7 +819,7 @@ function TBaseWebIDLToPas.GetSequenceTypeName(
 begin
   Result:=GetTypeName(Seq.ElementType,ForTypeDef);
   if Result='' then
-    raise EConvertError.Create('sequence without name at '+GetDefPos(Seq));
+    raise EConvertError.Create('[20220725172227] sequence without name at '+GetDefPos(Seq));
   if LeftStr(Result,length(ArrayPrefix))<>ArrayPrefix then
     Result:=ArrayPrefix+Result;
   Result:=Result+ArraySuffix;
@@ -1596,8 +1596,9 @@ procedure TBaseWebIDLToPas.ResolveTypeDef(D: TIDLDefinition);
     //writeln('ResolveTypeName ',Def<>nil);
     if Def=nil then
       begin
-      if NameToWebIDLBaseType(aTypeName)=wibtNone then
-        raise EConvertError.Create('type "'+aTypeName+'" of "'+D.Name+'" not found at '+GetDefPos(D));
+      if (NameToWebIDLBaseType(aTypeName)=wibtNone)
+          and (TypeAliases.Values[aTypeName]='') then
+        raise EConvertError.Create('[20220725172231] type "'+aTypeName+'" of "'+D.Name+'" not found at '+GetDefPos(D));
       end
     else
       begin
@@ -1640,7 +1641,10 @@ begin
   else if D is TIDLTypeDefDefinition then
     ResolveTypeName(TIDLTypeDefDefinition(D).TypeName)
   else if D is TIDLConstDefinition then
-    ResolveTypeName(TIDLConstDefinition(D).TypeName)
+    begin
+    if TIDLConstDefinition(D).TypeName<>'' then
+      ResolveTypeName(TIDLConstDefinition(D).TypeName);
+    end
   else if D is TIDLSerializerDefinition then
     begin
     SerializerD:=TIDLSerializerDefinition(D);
@@ -1663,7 +1667,7 @@ begin
     ResolveTypeDef(IT.KeyType);
     end
   else {if Verbose then}
-    raise EConvertError.Create('TBaseWebIDLToPas.ResolveTypeDef unknown '+D.Name+':'+D.ClassName+' at '+GetDefPos(D));
+    raise EConvertError.Create('[20220725172214] TBaseWebIDLToPas.ResolveTypeDef unknown '+D.Name+':'+D.ClassName+' at '+GetDefPos(D));
 end;
 
 procedure TBaseWebIDLToPas.RemoveInterfaceForwards(aList: TIDLDefinitionList);
@@ -1699,7 +1703,7 @@ Var
       else if Def.IsForward then
         DeleteIntf(Def)
       else
-        raise EConvertError.Create('Duplicate interface '+GetDefPos(Def)+' and '+GetDefPos(OldDef)+' (20220718184717)');
+        raise EConvertError.Create('[20220725172236] Duplicate interface '+GetDefPos(Def)+' and '+GetDefPos(OldDef)+' (20220718184717)');
       end;
   end;
 

+ 4 - 4
packages/webidl/src/webidltowasmjob.pp

@@ -236,7 +236,7 @@ begin
   Case aTypeName of
     'union',
     'any': Result:=JOB_JSValueTypeNames[jjvkUndefined];
-    'void': Result:=aTypeName;
+    'void','undefined': Result:=aTypeName;
   else
     //writeln('TWebIDLToPasWasmJob.GetTypeName ',aTypeName,' ',Def<>nil);
     Result:=inherited GetTypeName(aTypeName,ForTypeDef);
@@ -474,7 +474,7 @@ begin
         ReturnTypeName:=GetPasIntfName(ReturnDef);
         end
       else
-        raise EConvertError.Create('not yet supported: function return type '+ResolvedReturnTypeName+' '+ReturnDef.ClassName+' at '+GetDefPos(aDef));
+        raise EConvertError.Create('[20220725172242] not yet supported: function return type '+ResolvedReturnTypeName+' '+ReturnDef.ClassName+' at '+GetDefPos(aDef));
     end;
 
     end;
@@ -532,7 +532,7 @@ begin
             ArgType:=FindGlobalDef(ArgTypeName);
             if Verbose then
               writeln('Hint: TWebIDLToPasWasmJob.WriteFunctionDefinition sequence of ',ArgTypeName,' Element=',ArgType<>nil);
-            raise EConvertError.Create('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
           else
             begin
@@ -649,7 +649,7 @@ begin
       ArgType:=GetResolvedType(ArgDef.ArgumentType,ArgTypeName,ArgResolvedTypename);
 
       case ArgResolvedTypename of
-      '': raise EWebIDLParser.Create('not yet supported: function type arg['+IntToStr(I)+'] type void at '+GetDefPos(ArgDef));
+      '': raise EWebIDLParser.Create('not yet supported: function type arg['+IntToStr(I)+'] type void/undefined at '+GetDefPos(ArgDef));
       'Boolean': GetFunc:='GetBoolean';
       'ShortInt',
       'Byte',