This commit is contained in:
Ivan Bondarev 2021-10-10 10:33:40 +02:00
parent 29a2fb4156
commit 0923a10a68
2 changed files with 18 additions and 0 deletions

View file

@ -9082,12 +9082,14 @@ namespace PascalABCCompiler.NETGenerator
EmitOperator(value); EmitOperator(value);
if (!(real_parameters[0] is IDefaultOperatorNode) && !(real_parameters[1] is IDefaultOperatorNode)) if (!(real_parameters[0] is IDefaultOperatorNode) && !(real_parameters[1] is IDefaultOperatorNode))
{ {
is_dot_expr = true;
real_parameters[0].visit(this); real_parameters[0].visit(this);
if (real_parameters[0].type is IGenericTypeInstance) if (real_parameters[0].type is IGenericTypeInstance)
mi_left = TypeBuilder.GetMethod(ti_right.tp, typeof(Nullable<>).GetMethod("get_HasValue", new Type[] { })); mi_left = TypeBuilder.GetMethod(ti_right.tp, typeof(Nullable<>).GetMethod("get_HasValue", new Type[] { }));
else else
mi_left = ti_left.tp.GetMethod("get_HasValue", new Type[] { }); mi_left = ti_left.tp.GetMethod("get_HasValue", new Type[] { });
il.Emit(OpCodes.Call, mi_left); il.Emit(OpCodes.Call, mi_left);
is_dot_expr = true;
real_parameters[1].visit(this); real_parameters[1].visit(this);
if (real_parameters[1].type is IGenericTypeInstance) if (real_parameters[1].type is IGenericTypeInstance)
mi_right = TypeBuilder.GetMethod(ti_right.tp, typeof(Nullable<>).GetMethod("get_HasValue", new Type[] { })); mi_right = TypeBuilder.GetMethod(ti_right.tp, typeof(Nullable<>).GetMethod("get_HasValue", new Type[] { }));

16
TestSuite/nullable6.pas Normal file
View file

@ -0,0 +1,16 @@
type
t1 = class
function f1: char? := #1;
end;
function f2: char? := #1;
begin
var b := t1.Create.f1 = #1;
assert(b);
var c := #1;
assert(t1.Create.f1 = c);
var nc: char? := #1;
assert(t1.Create.f1 = nc);
assert(f2 = c);
end.