diff options
author | mattias <mattias@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2019-10-16 16:23:51 +0000 |
---|---|---|
committer | mattias <mattias@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2019-10-16 16:23:51 +0000 |
commit | a33e6cf38d8c91ca4ca5caaeac299484d0392b0e (patch) | |
tree | 1ac857e14c91426f0024fe9db3ffa60be503a8a9 /packages/fcl-passrc/tests/tcresolvegenerics.pas | |
parent | 432b03a1d382189d4dc4fc5c68a5d32f565db6f8 (diff) | |
download | fpc-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.pas | 41 |
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); |