This commit is contained in:
Ivan Bondarev 2023-04-07 10:52:54 +02:00
parent 110a19ff90
commit 0050316c97
2 changed files with 22 additions and 1 deletions

View file

@ -7612,7 +7612,7 @@ namespace PascalABCCompiler.NETGenerator
{
if (value.obj.type.is_generic_parameter)
il.Emit(OpCodes.Constrained, helper.GetTypeReference(value.obj.type).tp);
else if (value.obj.conversion_type != null && value.obj.conversion_type.is_generic_parameter)
else if (value.obj.conversion_type != null && value.obj.conversion_type.is_generic_parameter && !value.obj.type.IsInterface)
il.Emit(OpCodes.Constrained, helper.GetTypeReference(value.obj.conversion_type).tp);
il.EmitCall(OpCodes.Callvirt, mi, null);
}

21
TestSuite/generics68.pas Normal file
View file

@ -0,0 +1,21 @@
var i: integer;
type
I1 = interface
procedure p1;
end;
// Обязательно класс, не запись
t2 = class(I1)
public procedure p1;
begin
i := 1;
end;
end;
// Обязательно I1(o), (o as I1) работает без проблем
procedure p0<T>(o: T) := I1(o).p1;
begin
p0(new t2);
assert(i = 1);
end.