From 170e47253dab8ad8c6b619df1266255a4c568c28 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: Tue, 20 Mar 2018 20:02:20 +0100 Subject: [PATCH] bug fix #529 --- TestSuite/lambdas_closures_13.pas | 25 +++++++++++++++++++ ...uredVariablesSubstitutionClassGenerator.cs | 9 +++++-- 2 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 TestSuite/lambdas_closures_13.pas diff --git a/TestSuite/lambdas_closures_13.pas b/TestSuite/lambdas_closures_13.pas new file mode 100644 index 000000000..44337e5a7 --- /dev/null +++ b/TestSuite/lambdas_closures_13.pas @@ -0,0 +1,25 @@ +type + t1 = class + + public class i: integer; + + procedure p1; + begin + var i2: integer; + + var p: procedure := ()->begin + + i += 1; + i2 += 1; + + end; + p; + end; + + end; + +begin + var o := new t1; + o.p1; + assert(t1.i = 1); +end. \ No newline at end of file diff --git a/TreeConverter/LambdaExpressions/Closure/CapturedVariablesSubstitutionClassGenerator.cs b/TreeConverter/LambdaExpressions/Closure/CapturedVariablesSubstitutionClassGenerator.cs index 77e816fba..f132a95a3 100644 --- a/TreeConverter/LambdaExpressions/Closure/CapturedVariablesSubstitutionClassGenerator.cs +++ b/TreeConverter/LambdaExpressions/Closure/CapturedVariablesSubstitutionClassGenerator.cs @@ -392,7 +392,11 @@ namespace TreeConverter.LambdaExpressions.Closure { if (upperScopeWhereVarsAreCaptured != scope) { - var dotnode1 = new dot_node( + dot_node dotnode1 = null; + if (ClassField != null && ClassField.IsStatic) + dotnode1 = new dot_node(ClassName, new ident(varName)); + else + dotnode1 = new dot_node( new ident(compiler_string_consts.self_word), new ident( _capturedVarsClassDefs[upperScopeWhereVarsAreCaptured.ScopeIndex] @@ -429,7 +433,8 @@ namespace TreeConverter.LambdaExpressions.Closure } else { - dotnode1 = new dot_node(dotnode1, new ident(varName)); + if (!(ClassField != null && ClassField.IsStatic)) + dotnode1 = new dot_node(dotnode1, new ident(varName)); } } else