From 539a689732c6a6250f86b8e435bd381a16d133bc Mon Sep 17 00:00:00 2001 From: Ivan Bondarev Date: Sun, 3 Jul 2022 12:19:20 +0200 Subject: [PATCH] #2675 --- TestSuite/delegates19.pas | 17 +++++++++++++++++ .../convertion_data_and_alghoritms.cs | 2 +- .../TreeConversion/syntax_tree_visitor.cs | 2 +- 3 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 TestSuite/delegates19.pas diff --git a/TestSuite/delegates19.pas b/TestSuite/delegates19.pas new file mode 100644 index 000000000..31fe71b07 --- /dev/null +++ b/TestSuite/delegates19.pas @@ -0,0 +1,17 @@ +var i: integer; +procedure p1; +begin + +end; +procedure p2; +begin + +end; +procedure p3(p: procedure); +begin + i := 1; +end; +begin + p3(true?p1:p2); + assert(i = 1); +end. \ No newline at end of file diff --git a/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs b/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs index d4a0e8b70..efe9250c7 100644 --- a/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs +++ b/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs @@ -668,7 +668,7 @@ namespace PascalABCCompiler.TreeConverter if (pct.first==null) { - if (to is delegated_methods && (to as delegated_methods).empty_param_method != null) + if (to is delegated_methods && (to as delegated_methods).empty_param_method != null && (to as delegated_methods).empty_param_method.ret_type != null) { return convert_type(en, (to as delegated_methods).empty_param_method.ret_type, loc); } diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs index b7176d45f..64e89d223 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -18618,7 +18618,7 @@ namespace PascalABCCompiler.TreeConverter { delegated_methods del_left = left.type as delegated_methods; delegated_methods del_right = right.type as delegated_methods; - if (del_left != null && del_right != null && del_left.empty_param_method == null && del_right.empty_param_method == null) + if (del_left != null && del_right != null && (del_left.empty_param_method == null && del_right.empty_param_method == null || del_left.empty_param_method.ret_type == null && del_right.empty_param_method.ret_type == null)) { base_function_call bfc = del_left.proper_methods[0]; common_type_node del =