bug fix #2218
This commit is contained in:
parent
735e051a87
commit
e82be647b2
28
TestSuite/generics39.pas
Normal file
28
TestSuite/generics39.pas
Normal 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.
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue