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