summaryrefslogtreecommitdiff
path: root/packages/fcl-passrc/tests/tcresolvegenerics.pas
diff options
context:
space:
mode:
authormattias <mattias@3ad0048d-3df7-0310-abae-a5850022a9f2>2020-05-30 13:28:51 +0000
committermattias <mattias@3ad0048d-3df7-0310-abae-a5850022a9f2>2020-05-30 13:28:51 +0000
commite32ae4fa784c5ddff236a10f443164cce97ce4d9 (patch)
treef4b7392d2cfecb65d67fc3aab62400fd239036c8 /packages/fcl-passrc/tests/tcresolvegenerics.pas
parentb5eede6a8f26af17036fedd2e6ab7a80c01fe868 (diff)
downloadfpc-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.pas46
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);