* 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
49 lines
1.6 KiB
C#
49 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.Collections.Generic;
|
||
|
||
using PascalABCCompiler.SyntaxTree;
|
||
|
||
namespace SyntaxVisitors.SugarVisitors
|
||
{
|
||
/// <summary>
|
||
/// А здесь не только замена кортежа - здесь оптимизация (a,b) := (1,2) и var (a,b) := (1,2)
|
||
/// </summary>
|
||
public class ToExprVisitor : BaseChangeVisitor
|
||
{
|
||
public static ToExprVisitor New
|
||
{
|
||
get { return new ToExprVisitor(); }
|
||
}
|
||
|
||
//private int num = 0;
|
||
//public string UniqueName()
|
||
//{
|
||
// num++;
|
||
// return "#let_expr_vis"+num.ToString();
|
||
//}
|
||
|
||
public override void visit(to_expr to_ex)
|
||
{
|
||
var pairMethod =
|
||
new method_call(
|
||
new dot_node(
|
||
new ident("PABCSystem", to_ex.source_context),
|
||
new ident("Pair", to_ex.source_context),
|
||
to_ex.source_context),
|
||
new expression_list(
|
||
new List<expression>()
|
||
{
|
||
to_ex.key,
|
||
to_ex.value
|
||
},
|
||
to_ex.source_context),
|
||
to_ex.source_context);
|
||
|
||
Replace(to_ex, pairMethod);
|
||
ProcessNode(to_ex.key);
|
||
ProcessNode(to_ex.value);
|
||
}
|
||
}
|
||
}
|