bug fix #2150
This commit is contained in:
parent
ea8c9b70e7
commit
b11bb61129
24
TestSuite/generics33.pas
Normal file
24
TestSuite/generics33.pas
Normal 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.
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue