This commit is contained in:
parent
5d52558f98
commit
456c05855e
|
|
@ -8932,7 +8932,7 @@ namespace PascalABCCompiler.NETGenerator
|
|||
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)
|
||||
|
|
@ -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
14
TestSuite/nil3.pas
Normal 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
14
TestSuite/nil4.pas
Normal 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
14
TestSuite/nil5.pas
Normal 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
14
TestSuite/nil6.pas
Normal 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.
|
||||
Loading…
Reference in a new issue