This commit is contained in:
parent
110a19ff90
commit
0050316c97
|
|
@ -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
21
TestSuite/generics68.pas
Normal 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.
|
||||
Loading…
Reference in a new issue