diff --git a/PascalABCNET.axml b/PascalABCNET.axml
index d67836fcb..bec9fd4d7 100644
--- a/PascalABCNET.axml
+++ b/PascalABCNET.axml
@@ -757,6 +757,39 @@
+
+ \yield\syntaxvisitors\yieldvisitors\processyieldscapturedvars.cs
+ function_header nfh = ObjectCopier.Clone(fh);
+
+ type_declarations GenClassesForYield ( procedure_definition pd , IEnumerable < var_def_statement > fields , IDictionary < string , string > localsMap , IDictionary < string , string > formalParamsMap , IDictionary < var_def_statement , var_def_statement > localsCloneMap , yield_locals_type_map_helper localTypeMapHelper )
+ public class ProcessYieldCapturedVarsVisitor : BaseChangeVisitor
+ namespace SyntaxVisitors
+
+
+
+
+
+ \treeconverter\treeconversion\syntax_tree_visitor.cs
+ visit_program_code(_block.program_code);
+
+ public override void visit ( SyntaxTree . block _block )
+ public class syntax_tree_visitor : SyntaxTree . AbstractVisitor
+ namespace PascalABCCompiler . TreeConverter
+
+
+
+
+
+ \treeconverter\treeconversion\syntax_tree_visitor.cs
+ if (lab.is_defined)
+
+ public override void visit ( SyntaxTree . labeled_statement _labeled_statement )
+ public class syntax_tree_visitor : SyntaxTree . AbstractVisitor
+ namespace PascalABCCompiler . TreeConverter
+
+
+
+
\ No newline at end of file
diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs
index bbd829a74..afee8b2ec 100644
--- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs
+++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs
@@ -8308,10 +8308,12 @@ namespace PascalABCCompiler.TreeConverter
{
AddError(get_location(_labeled_statement.label_name), "IDENT_{0}_IS_NOT_LABEL", _labeled_statement.label_name.name);
}
- if (lab.is_defined)
- {
- AddError(get_location(_labeled_statement.label_name), "LABEL_{0}_REDEFINED", _labeled_statement.label_name.name);
- }
+ // SSM - Patch повторного определения меток в подпрограммах при наличии лямбд
+ if (lambdaProcessingState != LambdaProcessingState.FinishPhase)
+ if (lab.is_defined)
+ {
+ AddError(get_location(_labeled_statement.label_name), "LABEL_{0}_REDEFINED", _labeled_statement.label_name.name);
+ }
lab.is_defined = true;
lab.comprehensive_code_block = context.block_stack.Peek();
foreach (goto_statement gs in lab.goto_statements)