This commit is contained in:
parent
788040d067
commit
bc726bbfc0
|
|
@ -10668,16 +10668,35 @@ namespace PascalABCCompiler.NETGenerator
|
|||
is_dot_expr = tmp_is_dot_expr;
|
||||
is_addr = tmp_is_addr;
|
||||
il.Emit(OpCodes.Brfalse, FalseLabel);
|
||||
value.ret_if_true.visit(this);
|
||||
if (value.ret_if_true is INullConstantNode && value.ret_if_true.type.is_nullable_type)
|
||||
{
|
||||
Type tp = helper.GetTypeReference(value.ret_if_true.type).tp;
|
||||
LocalBuilder lb = il.DeclareLocal(tp);
|
||||
il.Emit(OpCodes.Ldloca, lb);
|
||||
il.Emit(OpCodes.Initobj, tp);
|
||||
il.Emit(OpCodes.Ldloc, lb);
|
||||
}
|
||||
else
|
||||
value.ret_if_true.visit(this);
|
||||
var ti = helper.GetTypeReference(value.ret_if_true.type);
|
||||
if (ti != null)
|
||||
EmitBox(value.ret_if_true, ti.tp);
|
||||
il.Emit(OpCodes.Br, EndLabel);
|
||||
il.MarkLabel(FalseLabel);
|
||||
value.ret_if_false.visit(this);
|
||||
if (value.ret_if_false is INullConstantNode && value.ret_if_false.type.is_nullable_type)
|
||||
{
|
||||
Type tp = helper.GetTypeReference(value.ret_if_false.type).tp;
|
||||
LocalBuilder lb = il.DeclareLocal(tp);
|
||||
il.Emit(OpCodes.Ldloca, lb);
|
||||
il.Emit(OpCodes.Initobj, tp);
|
||||
il.Emit(OpCodes.Ldloc, lb);
|
||||
}
|
||||
else
|
||||
value.ret_if_false.visit(this);
|
||||
ti = helper.GetTypeReference(value.ret_if_false.type);
|
||||
if (ti != null)
|
||||
EmitBox(value.ret_if_false, ti.tp);
|
||||
|
||||
il.MarkLabel(EndLabel);
|
||||
|
||||
}
|
||||
|
|
|
|||
6
TestSuite/nullable10.pas
Normal file
6
TestSuite/nullable10.pas
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
begin
|
||||
var t := ( true ? 1 : nil, 2);
|
||||
var t2 := ( true ? nil : 1, 2);
|
||||
assert(t.Item1 = 1);
|
||||
assert(t2.Item1 = nil);
|
||||
end.
|
||||
Loading…
Reference in a new issue