summaryrefslogtreecommitdiff
path: root/packages/fcl-passrc/tests/tcresolvegenerics.pas
diff options
context:
space:
mode:
authormattias <mattias@3ad0048d-3df7-0310-abae-a5850022a9f2>2019-10-10 21:53:51 +0000
committermattias <mattias@3ad0048d-3df7-0310-abae-a5850022a9f2>2019-10-10 21:53:51 +0000
commit7b6371acc1a6e39c5adc4c6c926b801a8b73bddc (patch)
tree5dc070e88bb89fee24ed1da504ff11087eb792c6 /packages/fcl-passrc/tests/tcresolvegenerics.pas
parent4ea0d8b9640abe242b11c8da95f9a3cfb1f60e5a (diff)
downloadfpc-7b6371acc1a6e39c5adc4c6c926b801a8b73bddc.tar.gz
fcl-passrc: generic reference to proc type
git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@43164 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages/fcl-passrc/tests/tcresolvegenerics.pas')
-rw-r--r--packages/fcl-passrc/tests/tcresolvegenerics.pas39
1 files changed, 32 insertions, 7 deletions
diff --git a/packages/fcl-passrc/tests/tcresolvegenerics.pas b/packages/fcl-passrc/tests/tcresolvegenerics.pas
index 499e1bca6d..0945b17cb4 100644
--- a/packages/fcl-passrc/tests/tcresolvegenerics.pas
+++ b/packages/fcl-passrc/tests/tcresolvegenerics.pas
@@ -141,12 +141,12 @@ type
procedure TestGenProc_TypeParamWithDefaultParamDelphiFail;
procedure TestGenProc_Inference_NeedExplicitFail;
procedure TestGenProc_Inference_Overload;
- // ToDo procedure TestGenProc_Inference_OverloadForward;
+ procedure TestGenProc_Inference_OverloadForward;
procedure TestGenProc_Inference_Var_Overload;
//procedure TestGenProc_Inference_Widen;
procedure TestGenProc_Inference_DefaultValue;
procedure TestGenProc_Inference_DefaultValueMismatch;
- procedure TestGenProc_Inference_ProcT; // ToDo
+ procedure TestGenProc_Inference_ProcT;
procedure TestGenProc_Inference_Mismatch;
procedure TestGenProc_Inference_ArrayOfT;
// ToDo procedure TestGenProc_Inference_ProcType;
@@ -160,7 +160,6 @@ type
procedure TestGenMethod_NestedSelf;
procedure TestGenMethod_OverloadTypeParamCnt;
procedure TestGenMethod_OverloadArgs;
- // ToDo: procedure TestGenMethod_NestedProcDelphiFail; Delphi 10.3 does not support nested procs
end;
implementation
@@ -2099,6 +2098,34 @@ begin
ParseProgram;
end;
+procedure TTestResolveGenerics.TestGenProc_Inference_OverloadForward;
+begin
+ StartProgram(false);
+ Add([
+ '{$mode delphi}',
+ 'procedure {#A}Run<S>(a: S; b: boolean); forward; overload;',
+ 'procedure {#B}Run<T>(a: T; w: word); forward; overload;',
+ 'procedure {#C}Run<U>(a: U; b: U); forward; overload;',
+ 'procedure {#A2}Run<S>(a: S; b: boolean); overload;',
+ 'begin',
+ ' {@A}Run(1,true);', // non generic take precedence
+ ' {@B}Run(2,word(3));', // non generic take precedence
+ ' {@C}Run(''foo'',''bar'');',
+ 'end;',
+ 'procedure {#B2}Run<T>(a: T; w: word); overload;',
+ 'begin',
+ 'end;',
+ 'procedure {#C2}Run<U>(a: U; b: U); overload;',
+ 'begin',
+ 'end;',
+ 'begin',
+ ' {@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);
@@ -2160,13 +2187,11 @@ end;
procedure TTestResolveGenerics.TestGenProc_Inference_ProcT;
begin
- exit;
-
StartProgram(false);
Add([
'{$mode delphi}',
'type',
- ' TProc<T> = procedure(a: T);',
+ ' TProc<S> = reference to procedure(a: S);',
' TObject = class',
' procedure {#A}Run<T: class>(a: TProc<T>);',
' end;',
@@ -2177,7 +2202,7 @@ begin
'var obj: TObject;',
'begin',
' obj.{@A}Run<TBird>(procedure(Bird: TBird) begin end);',
- ' obj.{@A}Run(procedure(Bird: TBird) begin end);', // not supported by Delphi
+ //' obj.{@A}Run(procedure(Bird: TBird) begin end);', // not supported by Delphi
'']);
ParseProgram;
end;