diff options
author | mattias <mattias@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2019-10-10 21:53:51 +0000 |
---|---|---|
committer | mattias <mattias@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2019-10-10 21:53:51 +0000 |
commit | 7b6371acc1a6e39c5adc4c6c926b801a8b73bddc (patch) | |
tree | 5dc070e88bb89fee24ed1da504ff11087eb792c6 /packages/fcl-passrc/tests/tcresolvegenerics.pas | |
parent | 4ea0d8b9640abe242b11c8da95f9a3cfb1f60e5a (diff) | |
download | fpc-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.pas | 39 |
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; |