瀏覽代碼

webidl: added Function and BigInteger to base types

mattias 3 年之前
父節點
當前提交
a50e0382c5
共有 2 個文件被更改,包括 55 次插入18 次删除
  1. 6 0
      packages/webidl/src/webidldefs.pp
  2. 49 18
      packages/webidl/src/webidltopas.pp

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

@@ -38,6 +38,7 @@ Type
     wibtUnsignedLong,
     wibtLongLong,
     wibtUnsignedLongLong,
+    wibtBigInteger,
     // floats
     wibtFloat,             // not NaN or infinity
     wibtUnrestrictedFloat,
@@ -47,9 +48,11 @@ Type
     wibtDOMString, // UTF-16
     wibtUSVString, // UTF-16 without surrogates
     wibtByteString,
+    wibtUTF8String,
     // objects
     wibtRecord,
     wibtObject,
+    wibtFunction,
     wibtError,
     wibtDOMException,
     // arrays
@@ -81,6 +84,7 @@ const
     'unsigned long',
     'long long',
     'unsigned long long',
+    'BigInteger',
     'float',
     'unrestricted float',
     'double',
@@ -88,8 +92,10 @@ const
     'DOMString',
     'USVString',
     'ByteString',
+    'UTF8String',
     'record',
     'object',
+    'Function',
     'Error',
     'DOMException',
     'ArrayBuffer',

+ 49 - 18
packages/webidl/src/webidltopas.pp

@@ -1411,7 +1411,8 @@ procedure TBaseWebIDLToPas.AddJSIdentifier(D: TIDLDefinition);
 var
   Old: TIDLDefinition;
 begin
-  if D.Parent=nil then
+  if (D.Parent=nil)
+      or ((D is TIDLInterfaceDefinition) and TIDLInterfaceDefinition(D).IsMixin) then
     begin
     Old:=FindGlobalDef(D.Name);
     if Old<>nil then
@@ -1431,10 +1432,31 @@ begin
 end;
 
 procedure TBaseWebIDLToPas.ResolveTypeDef(D: TIDLDefinition);
+
+  procedure ResolveTypeName(const aTypeName: string);
+  var
+    Def: TIDLDefinition;
+    Data: TPasData;
+  begin
+    Def:=FindGlobalDef(aTypeName);
+    if Def=nil then
+      begin
+      if NameToWebIDLBaseType(aTypeName)=wibtNone then
+        writeln('Type ',aTypeName,' not found at ',GetDefPos(D));
+      end
+    else
+      begin
+      Data:=TPasData(D.Data);
+      if Data=nil then
+        Data:=CreatePasName('',D);
+      Data.Resolved:=Def;
+      end;
+  end;
+
 var
-  Def: TIDLDefinition;
-  aTypeName: String;
-  Data: TPasData;
+  DMD: TIDLDictionaryMemberDefinition;
+  IT: TIDLIterableDefinition;
+  SerializerD: TIDLSerializerDefinition;
 begin
   if D=nil then exit;
   //writeln('TBaseWebIDLToPas.ResolveTypeDef START ',D.Name,':',D.ClassName,' at ',GetDefPos(D));
@@ -1442,6 +1464,7 @@ begin
     ResolveTypeDefs((D as TIDLInterfaceDefinition).Members)
   else if D Is TIDLDictionaryDefinition then
     ResolveTypeDefs((D as TIDLDictionaryDefinition).Members)
+  else if D is TIDLIncludesDefinition then
   else if D Is TIDLFunctionDefinition then
     ResolveTypeDefs((D as TIDLFunctionDefinition).Arguments)
   else if D is TIDLAttributeDefinition then
@@ -1449,21 +1472,29 @@ begin
   else if D is TIDLArgumentDefinition then
     ResolveTypeDef(TIDLArgumentDefinition(D).ArgumentType)
   else if D is TIDLTypeDefDefinition then
+    ResolveTypeName(TIDLTypeDefDefinition(D).TypeName)
+  else if D is TIDLConstDefinition then
+    ResolveTypeName(TIDLConstDefinition(D).TypeName)
+  else if D is TIDLSerializerDefinition then
     begin
-    aTypeName:=TIDLTypeDefDefinition(D).TypeName;
-    Def:=FindGlobalDef(aTypeName);
-    if Def=nil then
-      begin
-      if NameToWebIDLBaseType(aTypeName)=wibtNone then
-        writeln('Type ',aTypeName,' not found at ',GetDefPos(D));
-      end
-    else
-      begin
-      Data:=TPasData(D.Data);
-      if Data=nil then
-        Data:=CreatePasName('',D);
-      Data.Resolved:=Def;
-      end;
+    SerializerD:=TIDLSerializerDefinition(D);
+    ResolveTypeDef(SerializerD.SerializerFunction);
+    end
+  else if D is TIDLDictionaryMemberDefinition then
+    begin
+    DMD:=TIDLDictionaryMemberDefinition(D);
+    ResolveTypeDef(DMD.MemberType);
+    ResolveTypeDef(DMD.DefaultValue);
+    end
+  else if D is TIDLEnumDefinition then
+  else if D is TIDLSetlikeDefinition then
+    ResolveTypeDef(TIDLSetlikeDefinition(D).ElementType)
+  else if D is TIDLImplementsOrIncludesDefinition then
+  else if D is TIDLIterableDefinition then
+    begin
+    IT:=TIDLIterableDefinition(D);
+    ResolveTypeDef(IT.ValueType);
+    ResolveTypeDef(IT.KeyType);
     end
   else {if Verbose then}
     writeln('TBaseWebIDLToPas.ResolveTypeDef unknown ',D.Name,':',D.ClassName,' at ',GetDefPos(D));