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; }