From db0b1d7cf118f5e8271c9a87d12f64e8863133f2 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, 18 Sep 2016 12:19:59 +0200 Subject: [PATCH] bug fix #277 --- TestSuite/question2.pas | 5 +++++ .../TreeConversion/syntax_tree_visitor.cs | 18 +++++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 TestSuite/question2.pas diff --git a/TestSuite/question2.pas b/TestSuite/question2.pas new file mode 100644 index 000000000..fee58b89e --- /dev/null +++ b/TestSuite/question2.pas @@ -0,0 +1,5 @@ +begin + var pred := char.IsDigit; + pred :=false ? char.IsLetter : char.IsDigit; + assert(pred('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 e8d12f629..cf4ad8c63 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -16796,7 +16796,23 @@ namespace PascalABCCompiler.TreeConverter else left = convertion_data_and_alghoritms.convert_type(left, right.type);*/ if (left is null_const_node) left = convertion_data_and_alghoritms.convert_type(left, right.type); - else right = convertion_data_and_alghoritms.convert_type(right, left.type); + else + { + 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) + { + base_function_call bfc = del_left.proper_methods[0]; + common_type_node del = + convertion_data_and_alghoritms.type_constructor.create_delegate(context.get_delegate_type_name(), bfc.simple_function_node.return_value_type, bfc.simple_function_node.parameters, context.converted_namespace, null); + context.converted_namespace.types.AddElement(del); + right = convertion_data_and_alghoritms.explicit_convert_type(right, del); + left = convertion_data_and_alghoritms.explicit_convert_type(left, del); + } + else + right = convertion_data_and_alghoritms.convert_type(right, left.type); + } + //right = convertion_data_and_alghoritms.convert_type(right, left.type); return_value(new question_colon_expression(condition, left, right, get_location(node)));