diff options
author | mattias <mattias@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2019-09-26 06:35:46 +0000 |
---|---|---|
committer | mattias <mattias@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2019-09-26 06:35:46 +0000 |
commit | 13e638c5214ea0eb49651b9dddb85ae060785611 (patch) | |
tree | 8cb808999264d324553a31dafb0467ad51382bde /packages/fcl-passrc/tests/tcresolvegenerics.pas | |
parent | 56982322800198ac828e39986e9a969e9a00c7d7 (diff) | |
download | fpc-13e638c5214ea0eb49651b9dddb85ae060785611.tar.gz |
fcl-passrc: fixed generic proc overload
git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@43077 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages/fcl-passrc/tests/tcresolvegenerics.pas')
-rw-r--r-- | packages/fcl-passrc/tests/tcresolvegenerics.pas | 66 |
1 files changed, 62 insertions, 4 deletions
diff --git a/packages/fcl-passrc/tests/tcresolvegenerics.pas b/packages/fcl-passrc/tests/tcresolvegenerics.pas index 116d604641..1af95c8b14 100644 --- a/packages/fcl-passrc/tests/tcresolvegenerics.pas +++ b/packages/fcl-passrc/tests/tcresolvegenerics.pas @@ -129,17 +129,20 @@ type procedure TestGenProc_BackRef1Fail; procedure TestGenProc_BackRef2Fail; procedure TestGenProc_BackRef3Fail; - //procedure TestGenProc_Inference; procedure TestGenProc_CallSelf; + // ToDo procedure TestGenProc_CallSelfNoParams; procedure TestGenProc_ForwardConstraints; procedure TestGenProc_ForwardConstraintsRepeatFail; procedure TestGenProc_ForwardTempNameMismatch; procedure TestGenProc_ForwardOverload; procedure TestGenProc_NestedFail; + procedure TestGenProc_TypeParamCntOverload; + procedure TestGenProc_TypeParamCntOverloadNoParams; + //procedure TestGenProc_Inference; + + // generic methods procedure TestGenMethod_VirtualFail; - // ToDo: virtual method cannot have type parameters - // ToDo: message method cannot have type parameters - // ToDo: class interface method cannot have type parameters + procedure TestGenMethod_ClassInterfaceMethodFail; // ToDo: parametrized method mismatch interface method // ToDo: generic class method overload <T> <S,T> // ToDo: generic class method overload <T>(bool) <T>(word) @@ -1970,6 +1973,48 @@ begin CheckResolverException('Type parameters not allowed on nested procedure',nTypeParamsNotAllowedOnX); end; +procedure TTestResolveGenerics.TestGenProc_TypeParamCntOverload; +begin + StartProgram(false); + Add([ + 'generic procedure {#A}Run<T>(a: T);', + 'begin', + 'end;', + 'generic procedure {#B}Run<M,N>(a: M);', + 'begin', + ' specialize {@A}Run<M>(a);', + ' specialize {@B}Run<double,char>(1.3);', + 'end;', + 'begin', + ' specialize {@A}Run<word>(3);', + ' specialize {@B}Run<word,char>(4);', + '']); + ParseProgram; +end; + +procedure TTestResolveGenerics.TestGenProc_TypeParamCntOverloadNoParams; +begin + StartProgram(false); + Add([ + 'generic procedure {#A}Run<T>;', + 'begin', + 'end;', + 'generic procedure {#B}Run<M,N>;', + 'begin', + ' specialize {@A}Run<M>;', + ' specialize {@A}Run<M>();', + ' specialize {@B}Run<double,char>;', + ' specialize {@B}Run<double,char>();', + 'end;', + 'begin', + ' specialize {@A}Run<word>;', + ' specialize {@A}Run<word>();', + ' specialize {@B}Run<word,char>;', + ' specialize {@B}Run<word,char>();', + '']); + ParseProgram; +end; + procedure TTestResolveGenerics.TestGenMethod_VirtualFail; begin StartProgram(false); @@ -1984,6 +2029,19 @@ begin nXMethodsCannotHaveTypeParams); end; +procedure TTestResolveGenerics.TestGenMethod_ClassInterfaceMethodFail; +begin + StartProgram(false); + Add([ + 'type', + ' IUnknown = interface', + ' generic procedure Run<T>(a: T); virtual; abstract;', + ' end;', + 'begin', + '']); + CheckParserException('generic is not allowed in interface',nParserXNotAllowedInY); +end; + initialization RegisterTests([TTestResolveGenerics]); |