summaryrefslogtreecommitdiff
path: root/packages/fcl-passrc/tests/tcresolvegenerics.pas
diff options
context:
space:
mode:
authormattias <mattias@3ad0048d-3df7-0310-abae-a5850022a9f2>2019-10-07 20:00:20 +0000
committermattias <mattias@3ad0048d-3df7-0310-abae-a5850022a9f2>2019-10-07 20:00:20 +0000
commit8cc600f105ed08fb3ed580cee017f988c3fdfa0f (patch)
tree4c8a3c795b9a72bbdcb0076f63ad905e385d8fa6 /packages/fcl-passrc/tests/tcresolvegenerics.pas
parent39d6cc685a34a90f5dc47e18fe98cdb3b9cfb810 (diff)
downloadfpc-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.pas46
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;