This commit is contained in:
Ivan Bondarev 2021-02-14 11:10:22 +01:00
parent 5d52558f98
commit 456c05855e
5 changed files with 73 additions and 1 deletions

View file

@ -8984,6 +8984,22 @@ namespace PascalABCCompiler.NETGenerator
}
return;
}
else if (real_parameters[0].type.is_generic_parameter && real_parameters[1] is INullConstantNode)
{
real_parameters[0].visit(this);
il.Emit(OpCodes.Box, helper.GetTypeReference(real_parameters[0].type).tp);
il.Emit(OpCodes.Ldnull);
EmitOperator(value);
return;
}
else if (real_parameters[1].type.is_generic_parameter && real_parameters[0] is INullConstantNode)
{
il.Emit(OpCodes.Ldnull);
real_parameters[1].visit(this);
il.Emit(OpCodes.Box, helper.GetTypeReference(real_parameters[1].type).tp);
EmitOperator(value);
return;
}
}
real_parameters[0].visit(this);
if (real_parameters.Length > 1)

14
TestSuite/nil3.pas Normal file
View file

@ -0,0 +1,14 @@
var i: integer;
procedure p1<T>;
begin
var o: T;
if o = nil then
i := 1;
if o <> nil then
i := 2;
end;
begin
p1&<byte?>;
assert(i = 1);
end.

14
TestSuite/nil4.pas Normal file
View file

@ -0,0 +1,14 @@
var i: integer;
procedure p1<T>;
begin
var o: T;
if o = nil then
i := 1;
if o <> nil then
i := 2;
end;
begin
p1&<byte>;
assert(i = 2);
end.

14
TestSuite/nil5.pas Normal file
View file

@ -0,0 +1,14 @@
var i: integer;
procedure p1<T>; where T:class;
begin
var o: T;
if o = nil then
i := 1;
if o <> nil then
i := 2;
end;
begin
p1&<object>;
assert(i = 1);
end.

14
TestSuite/nil6.pas Normal file
View file

@ -0,0 +1,14 @@
var i: integer;
procedure p1<T>;
begin
var o: T;
if nil = o then
i := 1;
if nil <> o then
i := 2;
end;
begin
p1&<integer?>;
assert(i = 1);
end.