Browse Source

fcl-passrc: removed okgeneric, it bites generic interface

git-svn-id: trunk@41083 -
Mattias Gaertner 6 years ago
parent
commit
fcb2145255

+ 9 - 15
packages/fcl-passrc/src/pastree.pp

@@ -57,10 +57,10 @@ resourcestring
   SPasTreeObjectType = 'object';
   SPasTreeObjectType = 'object';
   SPasTreeClassType = 'class';
   SPasTreeClassType = 'class';
   SPasTreeInterfaceType = 'interface';
   SPasTreeInterfaceType = 'interface';
-  SPasTreeGenericType = 'generic class';
   SPasTreeSpecializedType = 'specialized class type';
   SPasTreeSpecializedType = 'specialized class type';
-  SPasClassHelperType = 'Class helper type';
-  SPasRecordHelperType = 'Record helper type';
+  SPasClassHelperType = 'class helper type';
+  SPasRecordHelperType = 'record helper type';
+  SPasTypeHelperType = 'type helper type';
   SPasTreeArgument = 'argument';
   SPasTreeArgument = 'argument';
   SPasTreeProcedureType = 'procedure type';
   SPasTreeProcedureType = 'procedure type';
   SPasTreeResultElement = 'function result';
   SPasTreeResultElement = 'function result';
@@ -737,12 +737,12 @@ type
 
 
   TPasObjKind = (
   TPasObjKind = (
     okObject, okClass, okInterface,
     okObject, okClass, okInterface,
-    okGeneric, // MG: what is okGeneric?
+    // okGeneric  removed in FPC 3.3.1  check instead GenericTemplateTypes
     // okSpecialize removed in FPC 3.1.1
     // okSpecialize removed in FPC 3.1.1
     okClassHelper,okRecordHelper,okTypeHelper,
     okClassHelper,okRecordHelper,okTypeHelper,
     okDispInterface);
     okDispInterface);
 const
 const
-  okWithFields = [okObject, okClass, okGeneric];
+  okWithFields = [okObject, okClass];
   okAllHelpers = [okClassHelper,okRecordHelper,okTypeHelper];
   okAllHelpers = [okClassHelper,okRecordHelper,okTypeHelper];
   okWithClassFields = okWithFields+okAllHelpers;
   okWithClassFields = okWithFields+okAllHelpers;
 
 
@@ -778,7 +778,6 @@ type
     ExternalNameSpace : String;
     ExternalNameSpace : String;
     ExternalName : String;
     ExternalName : String;
     InterfaceType: TPasClassInterfaceType;
     InterfaceType: TPasClassInterfaceType;
-    Procedure SetGenericTemplates(AList : TFPList); override;
     Function FindMember(MemberClass : TPTreeElement; Const MemberName : String) : TPasElement;
     Function FindMember(MemberClass : TPTreeElement; Const MemberName : String) : TPasElement;
     Function FindMemberInAncestors(MemberClass : TPTreeElement; Const MemberName : String) : TPasElement;
     Function FindMemberInAncestors(MemberClass : TPTreeElement; Const MemberName : String) : TPasElement;
     Function InterfaceGUID : string;
     Function InterfaceGUID : string;
@@ -1630,8 +1629,9 @@ const
     'strict private', 'strict protected');
     'strict private', 'strict protected');
 
 
   ObjKindNames: array[TPasObjKind] of string = (
   ObjKindNames: array[TPasObjKind] of string = (
-    'object', 'class', 'interface', 'class',
-    'class helper','record helper','type helper','dispinterface');
+    'object', 'class', 'interface',
+    'class helper','record helper','type helper',
+    'dispinterface');
 
 
   InterfaceTypeNames: array[TPasClassInterfaceType] of string = (
   InterfaceTypeNames: array[TPasClassInterfaceType] of string = (
     'COM',
     'COM',
@@ -3037,9 +3037,9 @@ begin
     okObject: Result := SPasTreeObjectType;
     okObject: Result := SPasTreeObjectType;
     okClass: Result := SPasTreeClassType;
     okClass: Result := SPasTreeClassType;
     okInterface: Result := SPasTreeInterfaceType;
     okInterface: Result := SPasTreeInterfaceType;
-    okGeneric : Result := SPasTreeGenericType;
     okClassHelper : Result:=SPasClassHelperType;
     okClassHelper : Result:=SPasClassHelperType;
     okRecordHelper : Result:=SPasRecordHelperType;
     okRecordHelper : Result:=SPasRecordHelperType;
+    okTypeHelper : Result:=SPasTypeHelperType;
   else
   else
     Result:='ObjKind('+IntToStr(ord(ObjKind))+')';
     Result:='ObjKind('+IntToStr(ord(ObjKind))+')';
   end;
   end;
@@ -3059,12 +3059,6 @@ begin
   ForEachChildCall(aMethodCall,Arg,GUIDExpr,false);
   ForEachChildCall(aMethodCall,Arg,GUIDExpr,false);
 end;
 end;
 
 
-procedure TPasClassType.SetGenericTemplates(AList: TFPList);
-begin
-  ObjKind:=okGeneric;
-  inherited SetGenericTemplates(AList);
-end;
-
 function TPasClassType.FindMember(MemberClass: TPTreeElement; const MemberName: String): TPasElement;
 function TPasClassType.FindMember(MemberClass: TPTreeElement; const MemberName: String): TPasElement;
 
 
 Var
 Var

+ 6 - 6
packages/fcl-passrc/src/pparser.pp

@@ -6719,7 +6719,7 @@ begin
       tkType:
       tkType:
         begin
         begin
         case AType.ObjKind of
         case AType.ObjKind of
-        okClass,okObject,okGeneric,
+        okClass,okObject,
         okClassHelper,okRecordHelper,okTypeHelper: ;
         okClassHelper,okRecordHelper,okTypeHelper: ;
         else
         else
           ParseExc(nParserXNotAllowedInY,SParserXNotAllowedInY,['TYPE',ObjKindNames[AType.ObjKind]]);
           ParseExc(nParserXNotAllowedInY,SParserXNotAllowedInY,['TYPE',ObjKindNames[AType.ObjKind]]);
@@ -6732,7 +6732,7 @@ begin
           ParseExc(nParserExpectToken2Error,SParserExpectToken2Error,
           ParseExc(nParserExpectToken2Error,SParserExpectToken2Error,
             ['Procedure','Var']);
             ['Procedure','Var']);
         case AType.ObjKind of
         case AType.ObjKind of
-        okClass,okObject,okGeneric,
+        okClass,okObject,
         okClassHelper,okRecordHelper,okTypeHelper: ;
         okClassHelper,okRecordHelper,okTypeHelper: ;
         else
         else
           ParseExc(nParserXNotAllowedInY,SParserXNotAllowedInY,['CONST',ObjKindNames[AType.ObjKind]]);
           ParseExc(nParserXNotAllowedInY,SParserXNotAllowedInY,['CONST',ObjKindNames[AType.ObjKind]]);
@@ -6789,7 +6789,7 @@ begin
         if not haveClass then
         if not haveClass then
           SaveComments;
           SaveComments;
         case AType.ObjKind of
         case AType.ObjKind of
-        okObject,okClass,okGeneric: ;
+        okObject,okClass: ;
         okClassHelper,okTypeHelper,okRecordHelper:
         okClassHelper,okTypeHelper,okRecordHelper:
           begin
           begin
           if (CurToken=tkdestructor) and not haveClass then
           if (CurToken=tkdestructor) and not haveClass then
@@ -6836,7 +6836,7 @@ begin
       tkclass:
       tkclass:
         begin
         begin
         case AType.ObjKind of
         case AType.ObjKind of
-        okClass,okObject,okGeneric,
+        okClass,okObject,
         okClassHelper,okRecordHelper,okTypeHelper: ;
         okClassHelper,okRecordHelper,okTypeHelper: ;
         else
         else
           ParseExc(nParserXNotAllowedInY,SParserXNotAllowedInY,['CLASS',ObjKindNames[AType.ObjKind]]);
           ParseExc(nParserXNotAllowedInY,SParserXNotAllowedInY,['CLASS',ObjKindNames[AType.ObjKind]]);
@@ -6876,7 +6876,7 @@ var
   Expr: TPasExpr;
   Expr: TPasExpr;
 
 
 begin
 begin
-  if (CurToken=tkIdentifier) and (AType.ObjKind in [okClass,okGeneric]) then
+  if (CurToken=tkIdentifier) and (AType.ObjKind=okClass) then
     begin
     begin
     s := LowerCase(CurTokenString);
     s := LowerCase(CurTokenString);
     if (s = 'sealed') or (s = 'abstract') then
     if (s = 'sealed') or (s = 'abstract') then
@@ -6896,7 +6896,7 @@ begin
       CheckToken(tkend);
       CheckToken(tkend);
     NextToken;
     NextToken;
     AType.AncestorType := ParseTypeReference(AType,false,Expr);
     AType.AncestorType := ParseTypeReference(AType,false,Expr);
-    if AType.ObjKind in [okClass,okGeneric] then
+    if AType.ObjKind=okClass then
       while CurToken=tkComma do
       while CurToken=tkComma do
         begin
         begin
         NextToken;
         NextToken;

+ 0 - 2
packages/pastojs/src/pas2jsfiler.pp

@@ -349,7 +349,6 @@ const
     'Object',
     'Object',
     'Class',
     'Class',
     'Interface',
     'Interface',
-    'Generic',
     'ClassHelper',
     'ClassHelper',
     'RecordHelper',
     'RecordHelper',
     'TypeHelper',
     'TypeHelper',
@@ -5694,7 +5693,6 @@ begin
     'Object': CreateClassType(okObject,Name);
     'Object': CreateClassType(okObject,Name);
     'Class': CreateClassType(okClass,Name);
     'Class': CreateClassType(okClass,Name);
     'Interface': CreateClassType(okInterface,Name);
     'Interface': CreateClassType(okInterface,Name);
-    'Generic': CreateClassType(okGeneric,Name);
     'ClassHelper': CreateClassType(okClassHelper,Name);
     'ClassHelper': CreateClassType(okClassHelper,Name);
     'RecordHelper': CreateClassType(okRecordHelper,Name);
     'RecordHelper': CreateClassType(okRecordHelper,Name);
     'TypeHelper': CreateClassType(okTypeHelper,Name);
     'TypeHelper': CreateClassType(okTypeHelper,Name);