fix #2149
This commit is contained in:
parent
b11bb61129
commit
ecdf35ab53
13
TestSuite/errors/err0347_wrong_generic_override.pas
Normal file
13
TestSuite/errors/err0347_wrong_generic_override.pas
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
type
|
||||
t1 = class
|
||||
procedure p1<T,U>(x: T; y: U); virtual := exit;
|
||||
end;
|
||||
|
||||
t2 = class(t1)
|
||||
procedure p1<TT,UU>(x: UU; y: TT); override;
|
||||
begin
|
||||
end;
|
||||
end;
|
||||
|
||||
begin
|
||||
end.
|
||||
26
TestSuite/generics34.pas
Normal file
26
TestSuite/generics34.pas
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
type
|
||||
t1 = class
|
||||
i: integer;
|
||||
procedure p1<T>(x: T); virtual := exit;
|
||||
function f<T>: T; virtual := default(T);
|
||||
end;
|
||||
|
||||
t2 = class(t1)
|
||||
procedure p1<TT>(x: TT); override;
|
||||
begin
|
||||
i := 1;
|
||||
end;
|
||||
function f<T1>: T1; override;
|
||||
begin
|
||||
Result := default(T1);
|
||||
i := 2;
|
||||
end;
|
||||
end;
|
||||
|
||||
begin
|
||||
var o: t1 := new t2;
|
||||
o.p1&<integer>(2);
|
||||
assert(o.i = 1);
|
||||
assert(o.f&<integer> = 0);
|
||||
assert(o.i = 2);
|
||||
end.
|
||||
|
|
@ -1549,8 +1549,8 @@ namespace PascalABCCompiler.TreeConverter
|
|||
{
|
||||
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;
|
||||
//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);
|
||||
}
|
||||
|
||||
|
|
@ -1575,13 +1575,13 @@ namespace PascalABCCompiler.TreeConverter
|
|||
{
|
||||
return false;
|
||||
}
|
||||
for (int i = 0; i < left_type_params.Count; i++)
|
||||
/*for (int i = 0; i < left_type_params.Count; i++)
|
||||
{
|
||||
if (string.Compare(left_type_params[i].name, right_type_params[i].name, true) != 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}*/
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue