Browse Source

* Allow object generics, bug ID #31485

git-svn-id: trunk@35571 -
michael 8 years ago
parent
commit
5de5fa9b7b

+ 1 - 0
.gitattributes

@@ -2585,6 +2585,7 @@ packages/fcl-passrc/src/readme.txt svneol=native#text/plain
 packages/fcl-passrc/tests/tcbaseparser.pas svneol=native#text/plain
 packages/fcl-passrc/tests/tcbaseparser.pas svneol=native#text/plain
 packages/fcl-passrc/tests/tcclasstype.pas svneol=native#text/plain
 packages/fcl-passrc/tests/tcclasstype.pas svneol=native#text/plain
 packages/fcl-passrc/tests/tcexprparser.pas svneol=native#text/plain
 packages/fcl-passrc/tests/tcexprparser.pas svneol=native#text/plain
+packages/fcl-passrc/tests/tcgenerics.pp svneol=native#text/plain
 packages/fcl-passrc/tests/tcmoduleparser.pas svneol=native#text/plain
 packages/fcl-passrc/tests/tcmoduleparser.pas svneol=native#text/plain
 packages/fcl-passrc/tests/tconstparser.pas svneol=native#text/plain
 packages/fcl-passrc/tests/tconstparser.pas svneol=native#text/plain
 packages/fcl-passrc/tests/tcpassrcutil.pas svneol=native#text/plain
 packages/fcl-passrc/tests/tcpassrcutil.pas svneol=native#text/plain

+ 1 - 0
packages/fcl-passrc/src/pparser.pp

@@ -2605,6 +2605,7 @@ begin
             ExpectToken(tkEqual);
             ExpectToken(tkEqual);
             NextToken;
             NextToken;
             Case CurToken of
             Case CurToken of
+              tkObject,
               tkClass :
               tkClass :
                  begin
                  begin
                  ClassEl := TPasClassType(CreateElement(TPasClassType,
                  ClassEl := TPasClassType(CreateElement(TPasClassType,

+ 39 - 0
packages/fcl-passrc/tests/tcgenerics.pp

@@ -0,0 +1,39 @@
+unit tcgenerics;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+  Classes, SysUtils, fpcunit, pparser, pastree, testregistry, tctypeparser;
+
+Type
+
+  { TTestGenerics }
+
+  TTestGenerics = Class(TBaseTestTypeParser)
+  Published
+    Procedure TestObjectGenerics;
+    Procedure TestSpecializationDelphi;
+  end;
+
+implementation
+
+procedure TTestGenerics.TestObjectGenerics;
+begin
+  Source.Add('Type');
+  Source.Add('Generic TSomeClass<T> = Object');
+  Source.Add('  b : T;');
+  Source.Add('end;');
+  ParseDeclarations;
+end;
+
+procedure TTestGenerics.TestSpecializationDelphi;
+begin
+  ParseType('TFPGList<integer>',TPasClassType,'');
+end;
+
+initialization
+  RegisterTest(TTestGenerics);
+end.
+

+ 0 - 5
packages/fcl-passrc/tests/tctypeparser.pas

@@ -161,7 +161,6 @@ type
     Procedure TestReferencePointer;
     Procedure TestReferencePointer;
     Procedure TestInvalidColon;
     Procedure TestInvalidColon;
     Procedure TestTypeHelper;
     Procedure TestTypeHelper;
-    Procedure TestSpecializationDelphi;
   end;
   end;
 
 
   { TTestRecordTypeParser }
   { TTestRecordTypeParser }
@@ -3306,10 +3305,6 @@ begin
   ParseType('Type Helper for AnsiString end',TPasClassType,'');
   ParseType('Type Helper for AnsiString end',TPasClassType,'');
 end;
 end;
 
 
-procedure TTestTypeParser.TestSpecializationDelphi;
-begin
-  ParseType('TFPGList<integer>',TPasClassType,'');
-end;
 
 
 initialization
 initialization
   RegisterTests([TTestTypeParser,TTestRecordTypeParser,TTestProcedureTypeParser]);
   RegisterTests([TTestTypeParser,TTestRecordTypeParser,TTestProcedureTypeParser]);

+ 6 - 2
packages/fcl-passrc/tests/testpassrc.lpi

@@ -30,7 +30,7 @@
     <RunParams>
     <RunParams>
       <local>
       <local>
         <FormatVersion Value="1"/>
         <FormatVersion Value="1"/>
-        <CommandLineParams Value="--suite=TTestStatementParser.TestCaseElseNoSemicolon"/>
+        <CommandLineParams Value="--suite=TTestScanner.TestSelf"/>
       </local>
       </local>
     </RunParams>
     </RunParams>
     <RequiredPackages Count="1">
     <RequiredPackages Count="1">
@@ -38,7 +38,7 @@
         <PackageName Value="FCL"/>
         <PackageName Value="FCL"/>
       </Item1>
       </Item1>
     </RequiredPackages>
     </RequiredPackages>
-    <Units Count="13">
+    <Units Count="14">
       <Unit0>
       <Unit0>
         <Filename Value="testpassrc.lpr"/>
         <Filename Value="testpassrc.lpr"/>
         <IsPartOfProject Value="True"/>
         <IsPartOfProject Value="True"/>
@@ -91,6 +91,10 @@
         <Filename Value="tcresolver.pas"/>
         <Filename Value="tcresolver.pas"/>
         <IsPartOfProject Value="True"/>
         <IsPartOfProject Value="True"/>
       </Unit12>
       </Unit12>
+      <Unit13>
+        <Filename Value="tcgenerics.pp"/>
+        <IsPartOfProject Value="True"/>
+      </Unit13>
     </Units>
     </Units>
   </ProjectOptions>
   </ProjectOptions>
   <CompilerOptions>
   <CompilerOptions>

+ 1 - 1
packages/fcl-passrc/tests/testpassrc.lpr

@@ -5,7 +5,7 @@ program testpassrc;
 uses
 uses
   Classes, consoletestrunner, tcscanner, tctypeparser, tcstatements,
   Classes, consoletestrunner, tcscanner, tctypeparser, tcstatements,
   tcbaseparser, tcmoduleparser, tconstparser, tcvarparser, tcclasstype,
   tcbaseparser, tcmoduleparser, tconstparser, tcvarparser, tcclasstype,
-  tcexprparser, tcprocfunc, tcpassrcutil, tcresolver;
+  tcexprparser, tcprocfunc, tcpassrcutil, tcresolver, tcgenerics;
 
 
 type
 type