This commit is contained in:
parent
07df31f762
commit
2bf21fb8aa
|
|
@ -5560,7 +5560,7 @@ namespace PascalABCCompiler.NETGenerator
|
||||||
//is_dot_expr = false;
|
//is_dot_expr = false;
|
||||||
is_field_reference = true;
|
is_field_reference = true;
|
||||||
value.obj.visit(this);
|
value.obj.visit(this);
|
||||||
is_field_reference = false;
|
|
||||||
is_addr = temp_is_addr;
|
is_addr = temp_is_addr;
|
||||||
FldInfo fi_info = helper.GetField(value.field);
|
FldInfo fi_info = helper.GetField(value.field);
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
|
|
@ -5576,7 +5576,10 @@ namespace PascalABCCompiler.NETGenerator
|
||||||
{
|
{
|
||||||
if (fi_info.field_type.IsValueType || fi_info.field_type.IsGenericParameter)
|
if (fi_info.field_type.IsValueType || fi_info.field_type.IsGenericParameter)
|
||||||
{
|
{
|
||||||
il.Emit(OpCodes.Ldflda, fi);
|
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)
|
||||||
|
il.Emit(OpCodes.Ldfld, fi);
|
||||||
|
else
|
||||||
|
il.Emit(OpCodes.Ldflda, fi);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
il.Emit(OpCodes.Ldfld, fi);
|
il.Emit(OpCodes.Ldfld, fi);
|
||||||
|
|
@ -5591,6 +5594,7 @@ namespace PascalABCCompiler.NETGenerator
|
||||||
{
|
{
|
||||||
is_dot_expr = false;
|
is_dot_expr = false;
|
||||||
}
|
}
|
||||||
|
is_field_reference = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void visit(SemanticTree.INamespaceVariableReferenceNode value)
|
public override void visit(SemanticTree.INamespaceVariableReferenceNode value)
|
||||||
|
|
|
||||||
20
TestSuite/generics44.pas
Normal file
20
TestSuite/generics44.pas
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
type
|
||||||
|
// Не обязательно auto класс, я добавил только ради конструктора
|
||||||
|
t0 = auto class
|
||||||
|
f: byte;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure p1<T>(o: T); where T: t0;
|
||||||
|
begin
|
||||||
|
assert(o.f = 123);
|
||||||
|
|
||||||
|
var p := procedure->
|
||||||
|
begin
|
||||||
|
var o2 := o;
|
||||||
|
end;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
p1(new t0(123));
|
||||||
|
end.
|
||||||
Loading…
Reference in a new issue