This commit is contained in:
Бондарев Иван 2020-03-01 12:28:55 +01:00
parent ea8c9b70e7
commit b11bb61129
2 changed files with 31 additions and 3 deletions

24
TestSuite/generics33.pas Normal file
View file

@ -0,0 +1,24 @@
var i: integer;
type
t1 = class
function f1<T>: T; virtual := default(T);
end;
t2 = class(t1)
function f1<T>: T; override;
begin
i := 1;
Result := default(T);
end;
end;
begin
var o: t1 := new t2;
assert(o.f1&<integer> = 0);
assert(i = 1);
end.

View file

@ -1409,9 +1409,6 @@ namespace PascalABCCompiler.TreeConverter
return method_compare.not_comparable_methods;
}
//DS добавил этот метод
//А так ли это надо делать?
//Сергей, может ты знаеш?
internal static bool eq_type_nodes(type_node tn1, type_node tn2, bool strong)
{
if (tn1 == tn2)
@ -1550,6 +1547,13 @@ namespace PascalABCCompiler.TreeConverter
}
else
{
if (left.return_value_type != null && right.return_value_type != null && left.return_value_type.is_generic_parameter && right.return_value_type.is_generic_parameter)
{
if (string.Compare(left.return_value_type.name, right.return_value_type.name, true) != 0)
return false;
return eq_type_nodes(left.return_value_type, right.return_value_type, false);
}
return eq_type_nodes(left.return_value_type, right.return_value_type, weak);
}
}