From 226ab08fbd3f13c8eae6b2f4e6d3b3216decba29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=91=D0=BE=D0=BD=D0=B4=D0=B0=D1=80=D0=B5=D0=B2=20=D0=98?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD?= Date: Thu, 4 Oct 2018 19:52:02 +0200 Subject: [PATCH] fix #1323 --- TestSuite/lambdas_generics7.pas | 19 +++++++++++++++++++ .../Closure/CapturedVariablesTreeBuilder.cs | 1 + TreeConverter/TreeRealization/types.cs | 2 ++ 3 files changed, 22 insertions(+) create mode 100644 TestSuite/lambdas_generics7.pas diff --git a/TestSuite/lambdas_generics7.pas b/TestSuite/lambdas_generics7.pas new file mode 100644 index 000000000..55392f92c --- /dev/null +++ b/TestSuite/lambdas_generics7.pas @@ -0,0 +1,19 @@ +type + t1=class + static p: Action; + end; + +procedure p0; +begin + var p1: Action; + p1 := o1->t1&.p(o1);//Ошибка: В данной версии компилятора не поддерживается замыкание данного типа символов + p1(default(T)); +end; + +var i: integer; + +begin + t1&.p := x -> begin i := 1; end; + p0&; + assert(i = 1); +end. \ No newline at end of file diff --git a/TreeConverter/LambdaExpressions/Closure/CapturedVariablesTreeBuilder.cs b/TreeConverter/LambdaExpressions/Closure/CapturedVariablesTreeBuilder.cs index eb61d3400..fea21204f 100644 --- a/TreeConverter/LambdaExpressions/Closure/CapturedVariablesTreeBuilder.cs +++ b/TreeConverter/LambdaExpressions/Closure/CapturedVariablesTreeBuilder.cs @@ -164,6 +164,7 @@ namespace TreeConverter.LambdaExpressions.Closure si.sym_info.semantic_node_type == semantic_node_type.common_namespace_node || si.sym_info.semantic_node_type == semantic_node_type.compiled_unit_node || si.sym_info.semantic_node_type == semantic_node_type.template_type || + si.sym_info.semantic_node_type == semantic_node_type.generic_indicator || si.sym_info.semantic_node_type == semantic_node_type.class_constant_definition || si.sym_info.semantic_node_type == semantic_node_type.basic_function_node && idName == "exit") { diff --git a/TreeConverter/TreeRealization/types.cs b/TreeConverter/TreeRealization/types.cs index c4f9d0a85..936be6530 100644 --- a/TreeConverter/TreeRealization/types.cs +++ b/TreeConverter/TreeRealization/types.cs @@ -3055,6 +3055,7 @@ namespace PascalABCCompiler.TreeRealization private void add_delegate_operator(string name, compile_time_executor executor) { common_namespace_function_node cnfn = new common_namespace_function_node(name, this, null, null, null); + cnfn.ConnectedToType = this; cnfn.compile_time_executor = executor; add_name(name, new SymbolInfo(cnfn)); @@ -3064,6 +3065,7 @@ namespace PascalABCCompiler.TreeRealization cnfn, concrete_parameter_type.cpt_none, null, null); cnfn.parameters.AddElement(cp1); cnfn.parameters.AddElement(cp2); + } //private bool ctors_inited = false;