Убран дурацкий код, из-за которого в BaseChangeVisitor все узлы обходились дважды.

Доработан LoweringVisitor, который ранее на это закладывался
This commit is contained in:
miks1965 2016-07-17 10:40:17 +03:00
parent ac0ce4b1be
commit 88cd8ce925
7 changed files with 35 additions and 12 deletions

View file

@ -14,12 +14,12 @@ namespace SyntaxVisitors
private bool _rootAdded = false; private bool _rootAdded = false;
public override void DefaultVisit(syntax_tree_node n) public override void DefaultVisit(syntax_tree_node n)
{ {
// frninja 07/12/15 // frninja 07/12/15 - // SSM - это - идиотский код, приводивший к двойному обходу визитором всех узлов
if (!_rootAdded) /*if (!_rootAdded)
{ {
_rootAdded = true; _rootAdded = true;
ProcessNode(n); ProcessNode(n);
} }*/
// Элементы списков - с конца в начало чтобы можно было эти элементы изменять по ходу (удалять/вставлять/заменять один несколькими) // Элементы списков - с конца в начало чтобы можно было эти элементы изменять по ходу (удалять/вставлять/заменять один несколькими)
var Сount = n.subnodes_count; var Сount = n.subnodes_count;

View file

@ -149,10 +149,14 @@ namespace SyntaxVisitors
stl, stl,
WhileCycleType.While); WhileCycleType.While);
ReplaceStatement(frch, var sq = SeqStatements(foreachCollVarDef, ass, enumeratorVarDef, whileNode);
SeqStatements(foreachCollVarDef, ass, enumeratorVarDef, whileNode)
);
ReplaceStatement(frch,sq);
visit(whileNode); // Lowering оставшегося whileNode
//var sl = UpperNodeAs<statement_list>();
//ProcessNode(sl); // необходимо еще lowerить while - как это сделать лучше - пока не знаю
} }
private expression CreateConditionFromCaseVariant(expression param, expression_list list) private expression CreateConditionFromCaseVariant(expression param, expression_list list)
@ -224,6 +228,8 @@ namespace SyntaxVisitors
if_node finalIfNode = currentIfNode; if_node finalIfNode = currentIfNode;
ReplaceStatement(csn, finalIfNode); ReplaceStatement(csn, finalIfNode);
visit(finalIfNode);
} }
public override void visit(if_node ifn) public override void visit(if_node ifn)

View file

@ -606,7 +606,8 @@ namespace SyntaxVisitors
/// </summary> /// </summary>
/// <param className="pd">Объявление метода</param> /// <param className="pd">Объявление метода</param>
/// <returns>Коллекция посещенных локальных переменных</returns> /// <returns>Коллекция посещенных локальных переменных</returns>
/*private void CreateLocalVariablesTypeProxies(procedure_definition pd, out IEnumerable<var_def_statement> localsClonesCollection) // SSM - Эта функция уже не нужна - я иногда использую ее чтобы посмотреть как выглядит функция после Loweringа
private void CreateLocalVariablesTypeProxies(procedure_definition pd, out IEnumerable<var_def_statement> localsClonesCollection)
{ {
// Выполняем определение типов локальных переменных с автовыводом типов // Выполняем определение типов локальных переменных с автовыводом типов
@ -632,7 +633,7 @@ namespace SyntaxVisitors
pd.proc_header.name.meth_name.source_context); // = new method_name("<yield_helper_locals_type_detector>" + pd.proc_header.className.meth_name.className); pd.proc_header.name.meth_name.source_context); // = new method_name("<yield_helper_locals_type_detector>" + pd.proc_header.className.meth_name.className);
InsertHelperMethod(pd, pdCloned); // SSM 13.07.16 - вызов этого метода можно не добавлять InsertHelperMethod(pd, pdCloned); // SSM 13.07.16 - вызов этого метода можно не добавлять
}*/ }
/// <summary> /// <summary>
/// Отображение локальных в клонированные локальные /// Отображение локальных в клонированные локальные
@ -926,8 +927,9 @@ namespace SyntaxVisitors
DeleteRedundantBeginEnds.Accept(pd); DeleteRedundantBeginEnds.Accept(pd);
// Обработка метода для корректного захвата локальных переменных и их типов // Обработка метода для корректного захвата локальных переменных и их типов
//IEnumerable<var_def_statement> localsClonesCollection; // - это уже не надо - иногда можно включать чтобы посмотреть, что собой представляет функция после Loweringа
//CreateLocalVariablesTypeProxies(pd, out localsClonesCollection); IEnumerable<var_def_statement> localsClonesCollection;
CreateLocalVariablesTypeProxies(pd, out localsClonesCollection);
// frninja 16/11/15: перенес ниже чтобы работал захват для lowered for // frninja 16/11/15: перенес ниже чтобы работал захват для lowered for

View file

@ -30,6 +30,21 @@ namespace SyntaxVisitors
New.ProcessNode(pd); New.ProcessNode(pd);
} }
public override void visit(procedure_definition pd)
{
DefaultVisit(pd);
}
public override void visit(statement_list st)
{
DefaultVisit(st);
}
public override void visit(for_node fn)
{
DefaultVisit(fn);
}
public override void visit(yield_node yn) public override void visit(yield_node yn)
{ {
var lambdaSearcher = new TreeConverter.LambdaExpressions.LambdaSearcher(yn); var lambdaSearcher = new TreeConverter.LambdaExpressions.LambdaSearcher(yn);

View file

@ -28,7 +28,7 @@ namespace YieldDesugarSyntaxTreeConverter
root.visit(new ProcessYieldCapturedVarsVisitor()); root.visit(new ProcessYieldCapturedVarsVisitor());
#if DEBUG #if DEBUG
// root.visit(new SimplePrettyPrinterVisitor(@"d:\zzz.txt")); //root.visit(new SimplePrettyPrinterVisitor(@"d:\zzz.txt"));
#endif #endif
return root; return root;

Binary file not shown.