From 163bb02603ae116be50ae43efc18bc41fbb5afc5 Mon Sep 17 00:00:00 2001 From: Ivan Bondarev Date: Sun, 7 Nov 2021 12:16:09 +0100 Subject: [PATCH] #2542 --- TestSuite/errors/err0441.pas | 7 +++++++ TreeConverter/TreeConversion/syntax_tree_visitor.cs | 11 +++++++++++ 2 files changed, 18 insertions(+) create mode 100644 TestSuite/errors/err0441.pas diff --git a/TestSuite/errors/err0441.pas b/TestSuite/errors/err0441.pas new file mode 100644 index 000000000..a0b39b36b --- /dev/null +++ b/TestSuite/errors/err0441.pas @@ -0,0 +1,7 @@ +//!Ожидалась функция, встречена процедура p +{$reference WindowsBase.dll} +begin +var p: byte->(); +System.Windows.Threading.Dispatcher(nil).Invoke(()->p(0)); + +end. diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs index 753ebaab5..8580a5f5f 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -7583,6 +7583,17 @@ namespace PascalABCCompiler.TreeConverter else { function_node fn = convertion_data_and_alghoritms.select_function(exprs, sil, subloc2, syntax_nodes_parameters); + if (!proc_wait && fn.return_value_type == null && exp2 != null && exp2 != null && fn.name == "Invoke") + { + string del_name = ""; + if (exp2 is local_block_variable_reference) + del_name = (exp2 as local_block_variable_reference).var.name; + else if (exp2 is local_variable_reference) + del_name = (exp2 as local_variable_reference).var.name; + else if (exp2 is namespace_variable_reference) + del_name = (exp2 as namespace_variable_reference).var.name; + AddError(subloc2, "FUNCTION_EXPECTED_PROCEDURE_{0}_MEET", del_name); + } base_function_call bbffcc = create_not_static_method_call(fn, exp2, subloc2, proc_wait); bbffcc.parameters.AddRange(exprs); expr_node = bbffcc;