This commit is contained in:
Ivan Bondarev 2023-11-04 12:14:45 +01:00
parent 4c2df22526
commit fd2300c303
2 changed files with 22 additions and 2 deletions

19
TestSuite/lambdas21.pas Normal file
View file

@ -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.

View file

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