From 6ca2ab67d9b8d869135d6116073bfc4a1cd9bb5f Mon Sep 17 00:00:00 2001 From: Ivan Bondarev Date: Sun, 17 Jan 2021 11:56:37 +0100 Subject: [PATCH] #1629 --- TestSuite/delegates16.pas | 5 +++++ TestSuite/delegates17.pas | 6 ++++++ TreeConverter/TreeConversion/syntax_tree_visitor.cs | 4 ++-- 3 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 TestSuite/delegates16.pas create mode 100644 TestSuite/delegates17.pas diff --git a/TestSuite/delegates16.pas b/TestSuite/delegates16.pas new file mode 100644 index 000000000..1bd4b123d --- /dev/null +++ b/TestSuite/delegates16.pas @@ -0,0 +1,5 @@ +begin + var l := Lst(1,3,5); + var o := l.IndexOf; + assert(o(3) = 1); +end. \ No newline at end of file diff --git a/TestSuite/delegates17.pas b/TestSuite/delegates17.pas new file mode 100644 index 000000000..fe1c1ad36 --- /dev/null +++ b/TestSuite/delegates17.pas @@ -0,0 +1,6 @@ +begin + var a: array of integer := |1,2,3|; + var l: List := new List(|4,2,5|); + var a2 := a.ConvertAll(l.Contains);//Ошибка: Нельзя преобразовать тип List к byte + assert(a2.ArrEqual(|false, true, false|)); +end. \ No newline at end of file diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs index ea5e612c7..fd661c03b 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -10055,8 +10055,8 @@ namespace PascalABCCompiler.TreeConverter List tmp_list = new List(sil); foreach (SymbolInfo tmp_si in tmp_list) { - if (tmp_si.sym_info is function_node && !(tmp_si.sym_info as function_node).is_extension_method - && !(tmp_si.sym_info is common_method_node && (tmp_si.sym_info as common_method_node).is_constructor) + if (tmp_si.sym_info is function_node && !(tmp_si.sym_info as function_node).is_extension_method && (tmp_si.sym_info as function_node).polymorphic_state != SemanticTree.polymorphic_state.ps_static + && !(tmp_si.sym_info is common_method_node && (tmp_si.sym_info as common_method_node).is_constructor) && (tmp_si.sym_info as function_node).return_value_type != null && !(tmp_si.sym_info is compiled_constructor_node)) return false; }