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