// 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 { /// /// А здесь не только замена кортежа - здесь оптимизация (a,b) := (1,2) и var (a,b) := (1,2) /// 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() { 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); } } }