This commit is contained in:
parent
8520567891
commit
474b477deb
17
TestSuite/generics51.pas
Normal file
17
TestSuite/generics51.pas
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
type
|
||||
I1<T>=interface end;
|
||||
C1<T>=class(I1<T>) end;
|
||||
C2=class(C1<integer>) end;
|
||||
|
||||
procedure p1<T,T1>(self: sequence of T; l: T->T1; o: I1<T1>); extensionmethod;
|
||||
begin
|
||||
assert(typeof(T) = typeof(byte));
|
||||
assert(typeof(T1) = typeof(integer));
|
||||
end;
|
||||
procedure p2<T,T1>(self: sequence of T; o: I1<T1>); extensionmethod := exit;
|
||||
|
||||
begin
|
||||
// любая 1 из этих строк даёт ошибку:
|
||||
Seq&<byte>.p1(b->0,new C2);
|
||||
Seq&<byte>.p2(new C2);
|
||||
end.
|
||||
|
|
@ -1282,14 +1282,36 @@ namespace PascalABCCompiler.TreeRealization
|
|||
base_type = base_type.base_type;
|
||||
}
|
||||
if (fact_type.ImplementingInterfaces != null && fact_type_converted == null)
|
||||
foreach (type_node ti in fact_type.ImplementingInterfaces)
|
||||
{
|
||||
if (ti.original_generic == formal_type.original_generic)
|
||||
foreach (type_node ti in fact_type.ImplementingInterfaces)
|
||||
{
|
||||
fact_type_converted = ti;
|
||||
break;
|
||||
if (ti.original_generic == formal_type.original_generic)
|
||||
{
|
||||
fact_type_converted = ti;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (fact_type_converted == null)
|
||||
{
|
||||
base_type = fact_type.base_type;
|
||||
while (base_type != null)
|
||||
{
|
||||
if (base_type.ImplementingInterfaces != null)
|
||||
foreach (type_node ti in base_type.ImplementingInterfaces)
|
||||
{
|
||||
if (ti.original_generic == formal_type.original_generic)
|
||||
{
|
||||
fact_type_converted = ti;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (fact_type_converted != null)
|
||||
break;
|
||||
base_type = base_type.base_type;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (fact_type_converted == null) goto eq_cmp;
|
||||
}
|
||||
else
|
||||
|
|
|
|||
Loading…
Reference in a new issue