This commit is contained in:
Бондарев Иван 2020-06-30 21:42:29 +02:00
parent 735e051a87
commit e82be647b2
2 changed files with 30 additions and 0 deletions

28
TestSuite/generics39.pas Normal file
View file

@ -0,0 +1,28 @@
type
t0<T> = class end;
t1 = class
function f1<T>: array of T; virtual := nil;
function f2<T>: t0<T>; virtual := nil;
function f3<T>: ^T; virtual := nil;
function f4<T1,T2>(a: T1; b: T2): (T1,T2); virtual := nil;
end;
t2 = class(t1)
function f1<T>: array of T; override := new T[2];
function f2<T>: t0<T>; override := new t0<T>;
function f3<T>: ^T; override := nil;
function f4<T2,T1>(a: T2; b: T1): (T2,T1); override := (a,b);
end;
begin
var o: t1 := new t2;
var a := o.f1&<integer>;
assert(a.Length = 2);
var o2 := o.f2&<integer>;
assert(o2 <> nil);
var o3 := o.f4&<integer,string>(2,'a');
assert(o3.Item1 = 2);
assert(o3.Item2 = 'a');
end.

View file

@ -1443,6 +1443,8 @@ namespace PascalABCCompiler.TreeConverter
{ {
if (strong && tn1.generic_function_container != tn2.generic_function_container) if (strong && tn1.generic_function_container != tn2.generic_function_container)
{ {
if (tn1.is_generic_parameter && tn2.is_generic_parameter)
return tn1.generic_param_index == tn2.generic_param_index;
return false; return false;
} }
return (tn1.generic_param_index == tn2.generic_param_index); return (tn1.generic_param_index == tn2.generic_param_index);