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;
|
base_type = base_type.base_type;
|
||||||
}
|
}
|
||||||
if (fact_type.ImplementingInterfaces != null && fact_type_converted == null)
|
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;
|
if (ti.original_generic == formal_type.original_generic)
|
||||||
break;
|
{
|
||||||
|
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;
|
if (fact_type_converted == null) goto eq_cmp;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue