diff options
author | mattias <mattias@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2019-10-07 20:00:20 +0000 |
---|---|---|
committer | mattias <mattias@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2019-10-07 20:00:20 +0000 |
commit | 8cc600f105ed08fb3ed580cee017f988c3fdfa0f (patch) | |
tree | 4c8a3c795b9a72bbdcb0076f63ad905e385d8fa6 /packages/fcl-passrc/tests/tcresolvegenerics.pas | |
parent | 39d6cc685a34a90f5dc47e18fe98cdb3b9cfb810 (diff) | |
download | fpc-8cc600f105ed08fb3ed580cee017f988c3fdfa0f.tar.gz |
fcl-passrc: implicit function specialization with var params
git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@43150 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages/fcl-passrc/tests/tcresolvegenerics.pas')
-rw-r--r-- | packages/fcl-passrc/tests/tcresolvegenerics.pas | 46 |
1 files changed, 34 insertions, 12 deletions
diff --git a/packages/fcl-passrc/tests/tcresolvegenerics.pas b/packages/fcl-passrc/tests/tcresolvegenerics.pas index d6d275e60f..983eef1b51 100644 --- a/packages/fcl-passrc/tests/tcresolvegenerics.pas +++ b/packages/fcl-passrc/tests/tcresolvegenerics.pas @@ -138,12 +138,12 @@ type procedure TestGenProc_NestedFail; procedure TestGenProc_TypeParamCntOverload; procedure TestGenProc_TypeParamCntOverloadNoParams; - procedure TestGenProc_TypeParamWithDefaultParamDelphiFail; // ToDo + procedure TestGenProc_TypeParamWithDefaultParamDelphiFail; procedure TestGenProc_Inference_NeedExplicitFail; - procedure TestGenProc_Inference_Overload; // ToDo - //procedure TestGenProc_Inference_Var_Overload; - // ToDo procedure TestGenProc_Inference_NonGenericPrecedence; - // ToDo procedure TestGenProc_Inference_DefaultValueFail + procedure TestGenProc_Inference_Overload; + procedure TestGenProc_Inference_Var_Overload; + //procedure TestGenProc_Inference_Widen; + // ToDo procedure TestGenProc_Inference_DefaultValue procedure TestGenProc_Inference_ProcT; procedure TestGenProc_Inference_Mismatch; // ToDo procedure TestGenProc_Inference_ArrayOfT; @@ -2049,8 +2049,6 @@ end; procedure TTestResolveGenerics.TestGenProc_TypeParamWithDefaultParamDelphiFail; begin // delphi 10.3 does not allow default values for args with generic types - exit; - StartProgram(false); Add([ '{$mode delphi}', @@ -2059,7 +2057,7 @@ begin 'end;', 'begin', '']); - CheckResolverException('Parameters of this type cannot have default values',123); + CheckResolverException(sParamOfThisTypeCannotHaveDefVal,nParamOfThisTypeCannotHaveDefVal); end; procedure TTestResolveGenerics.TestGenProc_Inference_NeedExplicitFail; @@ -2079,8 +2077,6 @@ end; procedure TTestResolveGenerics.TestGenProc_Inference_Overload; begin - exit; - StartProgram(false); Add([ '{$mode delphi}', @@ -2094,13 +2090,39 @@ begin 'begin', 'end;', 'begin', - ' {@A}Run(1,true);', - ' {@B}Run(2,3);', + ' {@A}Run(1,true);', // non generic take precedence + ' {@B}Run(2,word(3));', // non generic take precedence ' {@C}Run(''foo'',''bar'');', '']); ParseProgram; end; +procedure TTestResolveGenerics.TestGenProc_Inference_Var_Overload; +begin + StartProgram(false); + Add([ + '{$mode delphi}', + 'procedure {#A}Run<S>(var a: S; var b: boolean); overload;', + 'begin', + 'end;', + 'procedure {#B}Run<T>(var a: T; var w: word); overload;', + 'begin', + 'end;', + 'procedure {#C}Run<U>(var a: U; var b: U); overload;', + 'begin', + 'end;', + 'var', + ' w: word;', + ' b: boolean;', + ' s: string;', + 'begin', + ' {@A}Run(w,b);', + ' {@B}Run(s,w);', + ' {@C}Run(s,s);', + '']); + ParseProgram; +end; + procedure TTestResolveGenerics.TestGenProc_Inference_ProcT; begin exit; |