From 23c17a9e5a4419dc21c82627292b6fe38dfa8f99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=91=D0=BE=D0=BD=D0=B4=D0=B0=D1=80=D0=B5=D0=B2=20=D0=98?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD?= Date: Sun, 7 Jan 2018 14:28:40 +0100 Subject: [PATCH] bug fix #644 --- NETGenerator/NETGenerator.cs | 8 +++++++- TestSuite/cast2.pas | 18 ++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 TestSuite/cast2.pas diff --git a/NETGenerator/NETGenerator.cs b/NETGenerator/NETGenerator.cs index 5d7189c9b..085f2e977 100644 --- a/NETGenerator/NETGenerator.cs +++ b/NETGenerator/NETGenerator.cs @@ -9837,14 +9837,20 @@ namespace PascalABCCompiler.NETGenerator { Label EndLabel = il.DefineLabel(); Label FalseLabel = il.DefineLabel(); - + bool tmp_is_dot_expr = is_dot_expr; + bool tmp_is_addr = is_addr; + is_dot_expr = false;//don't box the condition expression + is_addr = false; value.condition.visit(this); + is_dot_expr = tmp_is_dot_expr; + is_addr = tmp_is_addr; il.Emit(OpCodes.Brfalse, FalseLabel); value.ret_if_true.visit(this); il.Emit(OpCodes.Br, EndLabel); il.MarkLabel(FalseLabel); value.ret_if_false.visit(this); il.MarkLabel(EndLabel); + } private Hashtable range_stmts_labels = new Hashtable(); diff --git a/TestSuite/cast2.pas b/TestSuite/cast2.pas new file mode 100644 index 000000000..1f4ec38db --- /dev/null +++ b/TestSuite/cast2.pas @@ -0,0 +1,18 @@ +var i: integer; + +procedure p(a: byte); +begin + i := 1; +end; + +type + fb = function: byte; + +begin + var a: function: byte := ()->2; + p(fb(a)); + assert(i = 1); + var b := fb(a); + assert(b = 2); + assert(fb(a).ToString = 'cast2.fb'); +end. \ No newline at end of file