From fd2300c30342dafccb6aee09566f8c8276eff5a5 Mon Sep 17 00:00:00 2001 From: Ivan Bondarev Date: Sat, 4 Nov 2023 12:14:45 +0100 Subject: [PATCH] #2950 --- TestSuite/lambdas21.pas | 19 +++++++++++++++++++ TreeConverter/TreeRealization/types.cs | 5 +++-- 2 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 TestSuite/lambdas21.pas diff --git a/TestSuite/lambdas21.pas b/TestSuite/lambdas21.pas new file mode 100644 index 000000000..2dac7d1ce --- /dev/null +++ b/TestSuite/lambdas21.pas @@ -0,0 +1,19 @@ +var i: integer; + +procedure p2(f: function(params a: array of integer): integer); +begin + assert(f(1,2,3) = 6); + Inc(i); +end; + + +function f(params a: array of integer): integer; +begin + Result := a.Sum(); +end; +begin + + //Ошибка: Нельзя преобразовать тип function(_: λ_anytype): λ_anytype к function(a: array of byte): byte + p2(a->f(a)); + assert(i = 1); +end. diff --git a/TreeConverter/TreeRealization/types.cs b/TreeConverter/TreeRealization/types.cs index 73f227261..e79299418 100644 --- a/TreeConverter/TreeRealization/types.cs +++ b/TreeConverter/TreeRealization/types.cs @@ -4775,8 +4775,9 @@ namespace PascalABCCompiler.TreeRealization var a3 = bfn.simple_function_node.parameters[i].is_params != dii.parameters[i].is_params;*/ //lroman// Добавил все, что связано с lambda_any_type_node. Считаем, что этот тип равен всем типам. Это используется при выводе параметров лямбды if ((!typesEqual && !(bfn.simple_function_node.parameters[i].type is lambda_any_type_node)) || - (bfn.simple_function_node.parameters[i].parameter_type != dii.parameters[i].parameter_type && !(bfn.simple_function_node.parameters[i].parameter_type is lambda_any_type_node)) - || bfn.simple_function_node.parameters[i].is_params != dii.parameters[i].is_params) + (bfn.simple_function_node.parameters[i].parameter_type != dii.parameters[i].parameter_type && !(bfn.simple_function_node.parameters[i].type is lambda_any_type_node)) + || bfn.simple_function_node.parameters[i].is_params != dii.parameters[i].is_params && !(bfn.simple_function_node.parameters[i].type is lambda_any_type_node) + && !bfn.simple_function_node.name.StartsWith("<>lambda")) { find_eq = false; }