This commit is contained in:
Ivan Bondarev 2021-01-27 20:14:32 +01:00
parent 5a20ef15dc
commit 88d0255e62
2 changed files with 17 additions and 1 deletions

View file

@ -5576,7 +5576,8 @@ namespace PascalABCCompiler.NETGenerator
{
if (fi_info.field_type.IsValueType || fi_info.field_type.IsGenericParameter)
{
if (is_field_reference && value.type.is_generic_parameter && value.type.base_type != null && value.type.base_type.is_class && value.type.base_type.base_type != null)
if (is_field_reference && (value.type.is_generic_parameter && value.type.base_type != null && value.type.base_type.is_class && value.type.base_type.base_type != null
|| value.conversion_type != null && value.conversion_type.is_generic_parameter && value.conversion_type.base_type != null && value.conversion_type.base_type.is_class && value.conversion_type.base_type.base_type != null))
il.Emit(OpCodes.Ldfld, fi);
else
il.Emit(OpCodes.Ldflda, fi);

15
TestSuite/generics48.pas Normal file
View file

@ -0,0 +1,15 @@
type
t0 = class
v := 123;
end;
procedure p1<T>(o: T);
where T: t0, constructor;
begin
assert(t0(o).v = 123);
var p := procedure -> o := o;
end;
begin
p1(new t0);
end.