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;
|
return method_compare.not_comparable_methods;
|
||||||
}
|
}
|
||||||
|
|
||||||
//DS добавил этот метод
|
|
||||||
//А так ли это надо делать?
|
|
||||||
//Сергей, может ты знаеш?
|
|
||||||
internal static bool eq_type_nodes(type_node tn1, type_node tn2, bool strong)
|
internal static bool eq_type_nodes(type_node tn1, type_node tn2, bool strong)
|
||||||
{
|
{
|
||||||
if (tn1 == tn2)
|
if (tn1 == tn2)
|
||||||
|
|
@ -1550,6 +1547,13 @@ namespace PascalABCCompiler.TreeConverter
|
||||||
}
|
}
|
||||||
else
|
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);
|
return eq_type_nodes(left.return_value_type, right.return_value_type, weak);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue