From 9477f6982b07f232233001db7749ebb0edb1b8e4 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: Mon, 21 May 2018 14:41:43 +0200 Subject: [PATCH] fix #850 --- TestSuite/lambdas_closures_14.pas | 17 +++++++++++++++++ .../Closure/CapturedVariablesTreeBuilder.cs | 2 ++ 2 files changed, 19 insertions(+) create mode 100644 TestSuite/lambdas_closures_14.pas diff --git a/TestSuite/lambdas_closures_14.pas b/TestSuite/lambdas_closures_14.pas new file mode 100644 index 000000000..ba4f8d20d --- /dev/null +++ b/TestSuite/lambdas_closures_14.pas @@ -0,0 +1,17 @@ +type + t1 = class//не работает только в классе + + const c1 = 5; + + procedure p1; + begin + var arr1 := ArrGen(1, i -> c1);//В данной версии компилятора не поддерживается замыкание данного типа символов + assert(arr1[0] = 5); + end; + + end; + +begin + var t := new t1; + t.p1; +end. \ No newline at end of file diff --git a/TreeConverter/LambdaExpressions/Closure/CapturedVariablesTreeBuilder.cs b/TreeConverter/LambdaExpressions/Closure/CapturedVariablesTreeBuilder.cs index fe938627b..60060ffe5 100644 --- a/TreeConverter/LambdaExpressions/Closure/CapturedVariablesTreeBuilder.cs +++ b/TreeConverter/LambdaExpressions/Closure/CapturedVariablesTreeBuilder.cs @@ -158,6 +158,7 @@ namespace TreeConverter.LambdaExpressions.Closure si.sym_info.semantic_node_type == semantic_node_type.common_unit_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.class_constant_definition || si.sym_info.semantic_node_type == semantic_node_type.basic_function_node && idName == "exit") { return; @@ -167,6 +168,7 @@ namespace TreeConverter.LambdaExpressions.Closure si.sym_info.semantic_node_type == semantic_node_type.local_block_variable || si.sym_info.semantic_node_type == semantic_node_type.common_parameter || si.sym_info.semantic_node_type == semantic_node_type.class_field + ; if (!(acceptableVarType) && InLambdaContext)