From 5de5fa9b7b17d86acab786cf10959ff1792e037e Mon Sep 17 00:00:00 2001
From: michael <michael@freepascal.org>
Date: Sun, 12 Mar 2017 12:11:12 +0000
Subject: [PATCH] * Allow object generics, bug ID #31485

git-svn-id: trunk@35571 -
---
 .gitattributes                             |  1 +
 packages/fcl-passrc/src/pparser.pp         |  1 +
 packages/fcl-passrc/tests/tcgenerics.pp    | 39 ++++++++++++++++++++++
 packages/fcl-passrc/tests/tctypeparser.pas |  5 ---
 packages/fcl-passrc/tests/testpassrc.lpi   |  8 +++--
 packages/fcl-passrc/tests/testpassrc.lpr   |  2 +-
 6 files changed, 48 insertions(+), 8 deletions(-)
 create mode 100644 packages/fcl-passrc/tests/tcgenerics.pp

diff --git a/.gitattributes b/.gitattributes
index b9d223f5fd..07b21207f8 100644
--- a/.gitattributes
+++ b/.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/tcclasstype.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/tconstparser.pas svneol=native#text/plain
 packages/fcl-passrc/tests/tcpassrcutil.pas svneol=native#text/plain
diff --git a/packages/fcl-passrc/src/pparser.pp b/packages/fcl-passrc/src/pparser.pp
index b66d10775d..83984d6fed 100644
--- a/packages/fcl-passrc/src/pparser.pp
+++ b/packages/fcl-passrc/src/pparser.pp
@@ -2605,6 +2605,7 @@ begin
             ExpectToken(tkEqual);
             NextToken;
             Case CurToken of
+              tkObject,
               tkClass :
                  begin
                  ClassEl := TPasClassType(CreateElement(TPasClassType,
diff --git a/packages/fcl-passrc/tests/tcgenerics.pp b/packages/fcl-passrc/tests/tcgenerics.pp
new file mode 100644
index 0000000000..c836bb5a1a
--- /dev/null
+++ b/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.
+
diff --git a/packages/fcl-passrc/tests/tctypeparser.pas b/packages/fcl-passrc/tests/tctypeparser.pas
index 47ac377319..7872f4265e 100644
--- a/packages/fcl-passrc/tests/tctypeparser.pas
+++ b/packages/fcl-passrc/tests/tctypeparser.pas
@@ -161,7 +161,6 @@ type
     Procedure TestReferencePointer;
     Procedure TestInvalidColon;
     Procedure TestTypeHelper;
-    Procedure TestSpecializationDelphi;
   end;
 
   { TTestRecordTypeParser }
@@ -3306,10 +3305,6 @@ begin
   ParseType('Type Helper for AnsiString end',TPasClassType,'');
 end;
 
-procedure TTestTypeParser.TestSpecializationDelphi;
-begin
-  ParseType('TFPGList<integer>',TPasClassType,'');
-end;
 
 initialization
   RegisterTests([TTestTypeParser,TTestRecordTypeParser,TTestProcedureTypeParser]);
diff --git a/packages/fcl-passrc/tests/testpassrc.lpi b/packages/fcl-passrc/tests/testpassrc.lpi
index 90c1df5466..c5c74182ae 100644
--- a/packages/fcl-passrc/tests/testpassrc.lpi
+++ b/packages/fcl-passrc/tests/testpassrc.lpi
@@ -30,7 +30,7 @@
     <RunParams>
       <local>
         <FormatVersion Value="1"/>
-        <CommandLineParams Value="--suite=TTestStatementParser.TestCaseElseNoSemicolon"/>
+        <CommandLineParams Value="--suite=TTestScanner.TestSelf"/>
       </local>
     </RunParams>
     <RequiredPackages Count="1">
@@ -38,7 +38,7 @@
         <PackageName Value="FCL"/>
       </Item1>
     </RequiredPackages>
-    <Units Count="13">
+    <Units Count="14">
       <Unit0>
         <Filename Value="testpassrc.lpr"/>
         <IsPartOfProject Value="True"/>
@@ -91,6 +91,10 @@
         <Filename Value="tcresolver.pas"/>
         <IsPartOfProject Value="True"/>
       </Unit12>
+      <Unit13>
+        <Filename Value="tcgenerics.pp"/>
+        <IsPartOfProject Value="True"/>
+      </Unit13>
     </Units>
   </ProjectOptions>
   <CompilerOptions>
diff --git a/packages/fcl-passrc/tests/testpassrc.lpr b/packages/fcl-passrc/tests/testpassrc.lpr
index abed69205b..322bb01a3d 100644
--- a/packages/fcl-passrc/tests/testpassrc.lpr
+++ b/packages/fcl-passrc/tests/testpassrc.lpr
@@ -5,7 +5,7 @@ program testpassrc;
 uses
   Classes, consoletestrunner, tcscanner, tctypeparser, tcstatements,
   tcbaseparser, tcmoduleparser, tconstparser, tcvarparser, tcclasstype,
-  tcexprparser, tcprocfunc, tcpassrcutil, tcresolver;
+  tcexprparser, tcprocfunc, tcpassrcutil, tcresolver, tcgenerics;
 
 type