diff --git a/NETGenerator/NETGenerator.cs b/NETGenerator/NETGenerator.cs index c373b26e3..658f4d858 100644 --- a/NETGenerator/NETGenerator.cs +++ b/NETGenerator/NETGenerator.cs @@ -5643,8 +5643,10 @@ namespace PascalABCCompiler.NETGenerator is_addr = false; //is_dot_expr = false; is_field_reference = true; + bool tmp_virtual_method_call = virtual_method_call; + virtual_method_call = false; value.obj.visit(this); - + virtual_method_call = tmp_virtual_method_call; is_addr = temp_is_addr; FldInfo fi_info = helper.GetField(value.field); #if DEBUG diff --git a/TestSuite/generics64.pas b/TestSuite/generics64.pas new file mode 100644 index 000000000..576ca86c6 --- /dev/null +++ b/TestSuite/generics64.pas @@ -0,0 +1,18 @@ +type + // не обязательно auto класс, я добавил только ради конструктора + t0 = auto class + f: byte; + end; + +procedure p1(o: T); where T: t0; +begin + assert(o.f.ToString.Println = '123'); + assert(o.f.ToString = '123'); + assert(o.f = 123); + // Обязательно захватить o + var p := procedure->(o := o); +end; + +begin + p1(new t0(123)); +end. \ No newline at end of file