From 22779adbf9c1214e69217e44c0e371aaa634b004 Mon Sep 17 00:00:00 2001 From: Ivan Bondarev Date: Mon, 1 Apr 2024 14:01:09 +0200 Subject: [PATCH] fix #2610 --- TestSuite/lambdas24.pas | 37 ++++++++++++++++++++++++++ TreeConverter/TreeRealization/types.cs | 8 +++--- 2 files changed, 41 insertions(+), 4 deletions(-) create mode 100644 TestSuite/lambdas24.pas diff --git a/TestSuite/lambdas24.pas b/TestSuite/lambdas24.pas new file mode 100644 index 000000000..9714a8c0f --- /dev/null +++ b/TestSuite/lambdas24.pas @@ -0,0 +1,37 @@ +var s: string; +type + // Обязательно разделить откуда берутся типы лямбды: + // TInput должно браться из шаблона класса (GenericContainer) + // TResult - из шаблона метода (TakeLambda) + GenericContainer = class + + // Не обязательно статический метод + static procedure TakeLambda(lambda: TInput->TResult); + begin + lambda(default(TInput)); + end; + + end; + +procedure PErr; +begin + + // Обязательно в качестве TInput указать не конкретный тип, + // а использовать тип из шаблона PErr + GenericContainer&.TakeLambda(l-> + begin + // Обязательно вычислять тип шаблона TakeLambda из тела лямбды + // Если вызвать TakeLambda& - не воспроизводится + Result := 0; + // Обязательно присвоить чему то результат + //Ошибка: ToString не объявлен в типе + var v := l.ToString; + s := v; + end); + +end; + +begin + PErr&; + assert(s = '0'); +end. \ No newline at end of file diff --git a/TreeConverter/TreeRealization/types.cs b/TreeConverter/TreeRealization/types.cs index 88435cdea..0fd2fd100 100644 --- a/TreeConverter/TreeRealization/types.cs +++ b/TreeConverter/TreeRealization/types.cs @@ -613,7 +613,7 @@ namespace PascalABCCompiler.TreeRealization { get { - return null; + return compiled_type_node.get_type_node(typeof(object)); } } @@ -647,7 +647,7 @@ namespace PascalABCCompiler.TreeRealization public override List find(string name, bool no_search_in_extension_methods = false) { - return null; + return base_type.find(name, no_search_in_extension_methods); } public override void add_name(string name, SymbolInfo si) @@ -657,12 +657,12 @@ namespace PascalABCCompiler.TreeRealization public override List find_in_type(string name, bool no_search_in_extension_methods = false) { - return null; + return base_type.find_in_type(name, no_search_in_extension_methods); } public override List find_in_type(string name, SymbolTable.Scope CurrentScope, type_node orig_generic_or_null = null, bool no_search_in_extension_methods = false) { - return null; + return base_type.find_in_type(name, CurrentScope, orig_generic_or_null, no_search_in_extension_methods); } public override bool is_value