From f601f8af3d9111052c7aca10423cf5d578321c6d Mon Sep 17 00:00:00 2001 From: Mikhalkovich Stanislav Date: Wed, 19 Jun 2019 00:47:35 +0300 Subject: [PATCH] =?UTF-8?q?fix=20=20#1880=20-=20=D1=81=D0=B0=D0=BC=D0=BE?= =?UTF-8?q?=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D0=BE=D1=81?= =?UTF-8?q?=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lambda_capture_GenClassInheritance.pas | 20 +++++++++++++++++++ .../Closure/CapturedVariablesTreeBuilder.cs | 2 +- .../TreeConversion/syntax_tree_visitor.cs | 2 +- 3 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 TestSuite/lambda_capture_GenClassInheritance.pas diff --git a/TestSuite/lambda_capture_GenClassInheritance.pas b/TestSuite/lambda_capture_GenClassInheritance.pas new file mode 100644 index 000000000..3465ca2cd --- /dev/null +++ b/TestSuite/lambda_capture_GenClassInheritance.pas @@ -0,0 +1,20 @@ +type + t0 = class end; + + t1 = class(t0) + + public procedure p1; + begin + var b: byte; + + var p: procedure := ()-> + begin + b += 1; + end; + + end; + + end; + +begin +end. \ No newline at end of file diff --git a/TreeConverter/LambdaExpressions/Closure/CapturedVariablesTreeBuilder.cs b/TreeConverter/LambdaExpressions/Closure/CapturedVariablesTreeBuilder.cs index 70b7b5cfd..731d5313a 100644 --- a/TreeConverter/LambdaExpressions/Closure/CapturedVariablesTreeBuilder.cs +++ b/TreeConverter/LambdaExpressions/Closure/CapturedVariablesTreeBuilder.cs @@ -747,7 +747,7 @@ namespace TreeConverter.LambdaExpressions.Closure public override void visit(PascalABCCompiler.SyntaxTree.goto_statement _goto_statement) { - if (_goto_statement.source_context != null) + if (_goto_statement.source_context != null) // видимо, это сделано для того чтобы сахарные конструкции всё же можно было использовать с лямбдами. То есть, это какое-то искусственное ограничение _visitor.AddError(_visitor.get_location(_goto_statement), "GOTO_AND_LAMBDAS_NOT_ALLOWED"); else base.visit(_goto_statement); diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs index 1b9b1ac05..6ac350a8d 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -2743,7 +2743,7 @@ namespace PascalABCCompiler.TreeConverter while (context._cmn.functions.Count > 0 && context._cmn.functions[context._cmn.functions.Count-1].function_code == null && context._cmn.functions[context._cmn.functions.Count - 1].name.StartsWith("<>lambda") && !context._cmn.functions[context._cmn.functions.Count - 1].name.StartsWith("<>lambda_initializer")) { #if DEBUG - System.IO.File.AppendAllText("aa.txt", context._cmn.functions[context._cmn.functions.Count - 1].name+"\n"); + //System.IO.File.AppendAllText("aa.txt", context._cmn.functions[context._cmn.functions.Count - 1].name+"\n"); #endif context._cmn.functions.remove_at(context._cmn.functions.Count - 1);