diff --git a/NETGenerator/NETGenerator.cs b/NETGenerator/NETGenerator.cs index c36505be2..618114c91 100644 --- a/NETGenerator/NETGenerator.cs +++ b/NETGenerator/NETGenerator.cs @@ -8591,7 +8591,11 @@ namespace PascalABCCompiler.NETGenerator mi = ti.tp.GetMethod("get_HasValue"); il.Emit(OpCodes.Call, mi); if (ft == basic_function_type.objeq) - il.Emit(OpCodes.Not); + { + il.Emit(OpCodes.Ldc_I4_0); + il.Emit(OpCodes.Ceq); + } + return; } else if (real_parameters[1].type.is_nullable_type && real_parameters[0] is INullConstantNode) @@ -8608,7 +8612,10 @@ namespace PascalABCCompiler.NETGenerator mi = ti.tp.GetMethod("get_HasValue"); il.Emit(OpCodes.Call, mi); if (ft == basic_function_type.objeq) - il.Emit(OpCodes.Not); + { + il.Emit(OpCodes.Ldc_I4_0); + il.Emit(OpCodes.Ceq); + } return; } else if (real_parameters[0].type.is_nullable_type && real_parameters[1].type.is_nullable_type) diff --git a/TestSuite/nullable.pas b/TestSuite/nullable.pas index 8a3f59933..d3c030a45 100644 --- a/TestSuite/nullable.pas +++ b/TestSuite/nullable.pas @@ -1,4 +1,4 @@ -type TRec = record +type TRec = record a: integer; b: real; end; @@ -146,6 +146,7 @@ begin assert(v1 = nil); v1 := 4; assert(v1 <> nil); + assert(not (v1 = nil)); v2 := nil; assert(v2 = nil); v2 := new TRec;