From 1ddc76a614a654cc1baea8c083936e9dba10a327 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: Thu, 3 Oct 2019 11:04:30 +0200 Subject: [PATCH] bug fix #2115 --- TestSuite/delegates12.pas | 17 +++++++++++++++++ .../TreeConversion/syntax_tree_visitor.cs | 5 ++++- 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 TestSuite/delegates12.pas diff --git a/TestSuite/delegates12.pas b/TestSuite/delegates12.pas new file mode 100644 index 000000000..04c6c770d --- /dev/null +++ b/TestSuite/delegates12.pas @@ -0,0 +1,17 @@ +procedure p := exit; + +var i: integer; + +procedure p1; +begin + if p = nil then + i := 1 + else if nil = p then + i := -1 + else + i := 2; +end; +begin + p1; + assert(i = 2); +end. \ No newline at end of file diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs index 534109e2a..c2d7046fa 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -1246,7 +1246,10 @@ namespace PascalABCCompiler.TreeConverter base_function_call bfc = ((left as typed_expression).type as delegated_methods).proper_methods[0]; left = convertion_data_and_alghoritms.explicit_convert_type(left, CreateDelegate(bfc.simple_function_node)); sil = left.type.find_in_type(name); - bfc = ((right as typed_expression).type as delegated_methods).proper_methods[0]; + if (!(right is typed_expression) && right.type is delegated_methods) + bfc = (right.type as delegated_methods).proper_methods[0]; + else + bfc = ((right as typed_expression).type as delegated_methods).proper_methods[0]; right = convertion_data_and_alghoritms.explicit_convert_type(right, CreateDelegate(bfc.simple_function_node)); sil2 = right.type.find_in_type(name); if (saved_sil != null && sil != null)