diff --git a/NETGenerator/NETGenerator.cs b/NETGenerator/NETGenerator.cs index f2ed6e97e..e50552d75 100644 --- a/NETGenerator/NETGenerator.cs +++ b/NETGenerator/NETGenerator.cs @@ -6919,7 +6919,7 @@ namespace PascalABCCompiler.NETGenerator { il.Emit(OpCodes.Box, helper.GetTypeReference(value.obj.conversion_type).tp); } - else if (value.obj.type.is_value_type && !(value.obj is IAddressedExpressionNode) && !(value.obj is IThisNode) && !(value.obj is ICommonMethodCallNode) && !(value.obj is ICommonConstructorCall)) + else if (value.obj.type.is_value_type && !(value.obj is IAddressedExpressionNode) && !(value.obj is IThisNode) && !(value.obj is ICommonMethodCallNode) && !(value.obj is ICommonStaticMethodCallNode) && !(value.obj is ICommonConstructorCall) && !(value.obj is ICommonNamespaceFunctionCallNode) && !(value.obj is ICommonNestedInFunctionFunctionCallNode)) { LocalBuilder lb = il.DeclareLocal(helper.GetTypeReference(value.obj.type).tp); il.Emit(OpCodes.Stloc, lb); diff --git a/TestSuite/records10.pas b/TestSuite/records10.pas new file mode 100644 index 000000000..fa5193254 --- /dev/null +++ b/TestSuite/records10.pas @@ -0,0 +1,31 @@ +type + + r1 = record + + public X, Y: integer; + + public constructor create(X, Y: integer); + begin + self.X := X; + self.Y := Y; + end; + + public function f1 := self.X; + + class function GetR1 := new r1(3, 4); + + end; + +function GetR1 := new r1(1, 2); + +procedure test; +function NestedGetR1 := new r1(1, 2); +begin + assert(NestedGetR1.f1 = 1); +end; + +begin + assert(GetR1.f1 = 1); + assert(r1.GetR1.f1 = 3); + test; +end. \ No newline at end of file