pascalabcnet/SyntaxVisitors/YieldVisitors/LoweringYieldSequenceVisitor.cs
Александр Земляк 1f4b44c2c0
Исправление ошибок при перекомпиляции pcu файлов (#3398)
* Move yield string constants to StringConstants class

* Add GeneratedNamesManager class to store all generated names during unit compilation

* Make GeneratedNamesManager class non static

* Add Utils project to installer files

* Add GeneratedNamesManager usage in CapturedVariablesSubstitutionsManager

* Move GeneratedNamesManager initialization in CompilationUnit constructor

* More GeneratedNamesManager usage

* QuestionPointDesugarVisitor fix
2026-03-08 18:30:33 +03:00

46 lines
1.6 KiB
C#

// Copyright (c) Ivan Bondarev, Stanislav Mikhalkovich (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using PascalABCCompiler.Errors;
using PascalABCCompiler;
using PascalABCCompiler.SyntaxTree;
using PascalABCCompiler.CoreUtils;
namespace SyntaxVisitors
{
public class LoweringYieldSequenceVisitor : BaseChangeVisitor
{
private readonly GeneratedNamesManager generatedNamesManager;
private LoweringYieldSequenceVisitor(GeneratedNamesManager generatedNamesManager)
{
this.generatedNamesManager = generatedNamesManager;
}
private ident NewVarName()
{
return new ident(generatedNamesManager.GenerateName("$yieldSeqForeachVar$"));
}
public static LoweringYieldSequenceVisitor Create(GeneratedNamesManager generatedNamesManager) => new LoweringYieldSequenceVisitor(generatedNamesManager);
public static void Accept(procedure_definition pd, GeneratedNamesManager generatedNamesManager)
{
Create(generatedNamesManager).ProcessNode(pd);
}
public override void visit(yield_sequence_node yn)
{
var id = NewVarName();
id.source_context = yn.source_context;
var fe = new foreach_stmt(id, new no_type_foreach(), yn.ex, new yield_node(id,yn.source_context),null,yn.source_context);
ReplaceStatement(yn, fe);
}
}
}