|
@@ -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));
|