pascalabcnet/SyntaxVisitors/YieldVisitors/LoweringYieldSequenceVisitor.cs
Mikhalkovich Stanislav 3240593d2e Реализован foreach index
Исправлена ошибка for step
Дополнена справка по for step и foreach index
J,yjdkty ntrcnjdsq htlfrnjh? gjlcdtxbdf.obq ыеуз b штвуч rjyntrcnyj d hfvrf[ jlyjq cnhjrb
2022-02-26 12:33:53 +03:00

44 lines
1.2 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;
namespace SyntaxVisitors
{
public class LoweringYieldSequenceVisitor : BaseChangeVisitor
{
private int _Num = 0;
private ident NewVarName()
{
++_Num;
return new ident("$yieldSeqForeachVar$" + _Num);
}
public static LoweringYieldSequenceVisitor New
{
get { return new LoweringYieldSequenceVisitor(); }
}
public static void Accept(procedure_definition pd)
{
New.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);
}
}
}