diff options
author | mattias <mattias@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2020-05-30 13:28:51 +0000 |
---|---|---|
committer | mattias <mattias@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2020-05-30 13:28:51 +0000 |
commit | e32ae4fa784c5ddff236a10f443164cce97ce4d9 (patch) | |
tree | f4b7392d2cfecb65d67fc3aab62400fd239036c8 /packages/fcl-passrc/tests/tcresolvegenerics.pas | |
parent | b5eede6a8f26af17036fedd2e6ab7a80c01fe868 (diff) | |
download | fpc-e32ae4fa784c5ddff236a10f443164cce97ce4d9.tar.gz |
fcl-passrc: resolver: nicer incompatible types anonymous proc and proc type
git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@45531 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, 46 insertions, 0 deletions
diff --git a/packages/fcl-passrc/tests/tcresolvegenerics.pas b/packages/fcl-passrc/tests/tcresolvegenerics.pas index e8d5db60e3..2d0502a3fc 100644 --- a/packages/fcl-passrc/tests/tcresolvegenerics.pas +++ b/packages/fcl-passrc/tests/tcresolvegenerics.pas @@ -108,6 +108,7 @@ type // generic procedure type procedure TestGen_ProcType; + procedure TestGen_ProcType_AnonymousFunc_Delphi; // pointer of generic procedure TestGen_PointerDirectSpecializeFail; @@ -1730,6 +1731,51 @@ begin ParseProgram; end; +procedure TTestResolveGenerics.TestGen_ProcType_AnonymousFunc_Delphi; +begin + StartProgram(false); + Add([ + '{$mode delphi}', + 'type', + ' TObject = class', + ' end;', + ' IInterface = interface', + ' end;', + ' Integer = longint;', + ' IComparer<T> = interface', + ' function Compare(const Left, Right: T): Integer; overload;', + ' end;', + ' TOnComparison<T> = function(const Left, Right: T): Integer of object;', + ' TComparisonFunc<T> = reference to function(const Left, Right: T): Integer;', + ' TComparer<T> = class(TObject, IComparer<T>)', + ' public', + ' function Compare(const Left, Right: T): Integer; overload;', + ' class function Construct(const AComparison: TOnComparison<T>): IComparer<T>; overload;', + ' class function Construct(const AComparison: TComparisonFunc<T>): IComparer<T>; overload;', + ' end;', + 'function TComparer<T>.Compare(const Left, Right: T): Integer; overload;', + 'begin', + 'end;', + 'class function TComparer<T>.Construct(const AComparison: TOnComparison<T>): IComparer<T>;', + 'begin', + 'end;', + 'class function TComparer<T>.Construct(const AComparison: TComparisonFunc<T>): IComparer<T>;', + 'begin', + 'end;', + 'procedure Test;', + 'var', + ' aComparer : IComparer<Integer>;', + 'begin', + ' aComparer:=TComparer<Integer>.Construct(function (Const a,b : integer) : integer', + ' begin', + ' Result:=a-b;', + ' end);', + 'end;', + 'begin', + ' Test;']); + ParseModule; +end; + procedure TTestResolveGenerics.TestGen_PointerDirectSpecializeFail; begin StartProgram(false); |