summaryrefslogtreecommitdiff
path: root/packages/fcl-passrc/tests/tcresolvegenerics.pas
diff options
context:
space:
mode:
authormattias <mattias@3ad0048d-3df7-0310-abae-a5850022a9f2>2019-10-16 16:23:51 +0000
committermattias <mattias@3ad0048d-3df7-0310-abae-a5850022a9f2>2019-10-16 16:23:51 +0000
commita33e6cf38d8c91ca4ca5caaeac299484d0392b0e (patch)
tree1ac857e14c91426f0024fe9db3ffa60be503a8a9 /packages/fcl-passrc/tests/tcresolvegenerics.pas
parent432b03a1d382189d4dc4fc5c68a5d32f565db6f8 (diff)
downloadfpc-a33e6cf38d8c91ca4ca5caaeac299484d0392b0e.tar.gz
fcl-passrc: useanalyzer: generic procedure
git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@43209 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages/fcl-passrc/tests/tcresolvegenerics.pas')
-rw-r--r--packages/fcl-passrc/tests/tcresolvegenerics.pas41
1 files changed, 41 insertions, 0 deletions
diff --git a/packages/fcl-passrc/tests/tcresolvegenerics.pas b/packages/fcl-passrc/tests/tcresolvegenerics.pas
index 3b3dcd11c0..0b89c40d0f 100644
--- a/packages/fcl-passrc/tests/tcresolvegenerics.pas
+++ b/packages/fcl-passrc/tests/tcresolvegenerics.pas
@@ -108,6 +108,7 @@ type
procedure TestGen_PointerDirectSpecializeFail;
// ToDo: helpers for generics
+ procedure TestGen_HelperForArray;
// ToDo: default class prop array helper: arr<b>[c]
// generic statements
@@ -159,6 +160,7 @@ type
// generic methods
procedure TestGenMethod_VirtualFail;
+ procedure TestGenMethod_PublishedFail;
procedure TestGenMethod_ClassInterfaceMethodFail;
procedure TestGenMethod_ClassConstructorFail;
procedure TestGenMethod_TemplNameDifferFail;
@@ -1583,6 +1585,27 @@ begin
CheckParserException('Expected "Identifier" at token "specialize" in file afile.pp at line 4 column 11',nParserExpectTokenError);
end;
+procedure TTestResolveGenerics.TestGen_HelperForArray;
+begin
+ StartProgram(false);
+ Add([
+ '{$ModeSwitch typehelpers}',
+ 'type',
+ ' generic TArr<T> = array[1..2] of T;',
+ ' TWordArrHelper = type helper for specialize TArr<word>',
+ ' procedure Fly(w: word);',
+ ' end;',
+ 'procedure TWordArrHelper.Fly(w: word);',
+ 'begin',
+ 'end;',
+ 'var',
+ ' a: specialize TArr<word>;',
+ 'begin',
+ ' a.Fly(3);',
+ '']);
+ ParseProgram;
+end;
+
procedure TTestResolveGenerics.TestGen_LocalVar;
begin
StartProgram(false);
@@ -2316,6 +2339,24 @@ begin
nXMethodsCannotHaveTypeParams);
end;
+procedure TTestResolveGenerics.TestGenMethod_PublishedFail;
+begin
+ StartProgram(false);
+ Add([
+ 'type',
+ ' TObject = class',
+ ' published',
+ ' generic procedure Run<T>(a: T);',
+ ' end;',
+ 'generic procedure TObject.Run<T>(a: T);',
+ 'begin',
+ 'end;',
+ 'begin',
+ '']);
+ CheckResolverException('published methods cannot have type parameters',
+ nXMethodsCannotHaveTypeParams);
+end;
+
procedure TTestResolveGenerics.TestGenMethod_ClassInterfaceMethodFail;
begin
StartProgram(false);