pascalabcnet/SyntaxVisitors/SugarVisitors/TestAssignIsDefVisitor.cs

40 lines
1.6 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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 PascalABCCompiler.SyntaxTree;
namespace SyntaxVisitors.SugarVisitors
{
public class TestAssignIsDefVisitor : BaseChangeVisitor
{
public static TestAssignIsDefVisitor New
{
get { return new TestAssignIsDefVisitor(); }
}
public override void visit(assign ass)
{
if ((ass.to as ident).name == "a") // это для примера - это надо закомментировать
ass.first_assignment_defines_type = true;
if (!ass.first_assignment_defines_type)
return;
syntax_tree_node p = ass;
while (!(p is PascalABCCompiler.SyntaxTree.block) && p != null) // ищем вверх ближайший блок
p = p.Parent;
if (p == null) // если блока нет, то выходим. Не знаю, почему его может не быть
return;
var typ = new named_type_reference("string",ass.source_context); // делаем какой-то правильный тип - всё равно при первом присваивании будем его менять
var decls = (p as block).defs;
var vds = new var_def_statement(ass.to as ident, typ, ass.source_context);
decls.Add(vds);
}
}
}