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);