This commit is contained in:
parent
fb5ecd3780
commit
4c2df22526
22
TestSuite/lambdas20.pas
Normal file
22
TestSuite/lambdas20.pas
Normal 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.
|
||||
|
|
@ -15462,6 +15462,14 @@ 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);
|
||||
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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue