This commit is contained in:
Ivan Bondarev 2023-11-03 17:24:20 +01:00
parent fb5ecd3780
commit 4c2df22526
2 changed files with 31 additions and 1 deletions

22
TestSuite/lambdas20.pas Normal file
View file

@ -0,0 +1,22 @@
type
// Обязательно внутри класса
t1 = class
// Не важно, статический ли метод
//
// Обязательно имя Equals
//
// Обязательно первый параметр - класс
// (из .dll или паскалевский - не важно)
//
// Обязательно p должен принимать параметр,
// чтобы лямбда ниже его авто-вычисляла
public static function Equals(o: Exception; p: byte->()) := true;
end;
begin
// Обязательно передать именно лямбду,
// а не существующую подпрограмму
assert(t1.Equals(nil, l->begin end));
end.

View file

@ -15462,7 +15462,15 @@ namespace PascalABCCompiler.TreeConverter
{
common_type_node del =
convertion_data_and_alghoritms.type_constructor.create_delegate(context.get_delegate_type_name(), fn.return_value_type, fn.parameters, context.converted_namespace, null);
context.converted_namespace.types.AddElement(del);
bool has_lambda_any_type = false;
foreach (common_method_node cmn in del.methods)
if (cmn.parameters.Count > 0 && cmn.parameters[0].type is lambda_any_type_node)
{
has_lambda_any_type = true;
break;
}
if (!has_lambda_any_type)
context.converted_namespace.types.AddElement(del);
return del;
}