Убран дурацкий код, из-за которого в BaseChangeVisitor все узлы обходились дважды.
Доработан LoweringVisitor, который ранее на это закладывался
This commit is contained in:
parent
ac0ce4b1be
commit
88cd8ce925
|
|
@ -15,7 +15,7 @@ begin
|
|||
|
||||
var q := a1.f(Range(1,4));
|
||||
|
||||
var sq := Seq(4,5,6,7);
|
||||
var sq := Seq(4,5,6,7);
|
||||
Assert(q.Println.SequenceEqual(sq));
|
||||
Assert(q.Println.SequenceEqual(sq));
|
||||
end.
|
||||
|
|
@ -14,12 +14,12 @@ namespace SyntaxVisitors
|
|||
private bool _rootAdded = false;
|
||||
public override void DefaultVisit(syntax_tree_node n)
|
||||
{
|
||||
// frninja 07/12/15
|
||||
if (!_rootAdded)
|
||||
// frninja 07/12/15 - // SSM - это - идиотский код, приводивший к двойному обходу визитором всех узлов
|
||||
/*if (!_rootAdded)
|
||||
{
|
||||
_rootAdded = true;
|
||||
ProcessNode(n);
|
||||
}
|
||||
}*/
|
||||
|
||||
// Элементы списков - с конца в начало чтобы можно было эти элементы изменять по ходу (удалять/вставлять/заменять один несколькими)
|
||||
var Сount = n.subnodes_count;
|
||||
|
|
|
|||
|
|
@ -149,10 +149,14 @@ namespace SyntaxVisitors
|
|||
stl,
|
||||
WhileCycleType.While);
|
||||
|
||||
ReplaceStatement(frch,
|
||||
SeqStatements(foreachCollVarDef, ass, enumeratorVarDef, whileNode)
|
||||
);
|
||||
var sq = 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)
|
||||
|
|
@ -224,6 +228,8 @@ namespace SyntaxVisitors
|
|||
if_node finalIfNode = currentIfNode;
|
||||
|
||||
ReplaceStatement(csn, finalIfNode);
|
||||
|
||||
visit(finalIfNode);
|
||||
}
|
||||
|
||||
public override void visit(if_node ifn)
|
||||
|
|
|
|||
|
|
@ -606,7 +606,8 @@ namespace SyntaxVisitors
|
|||
/// </summary>
|
||||
/// <param className="pd">Объявление метода</param>
|
||||
/// <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);
|
||||
|
||||
InsertHelperMethod(pd, pdCloned); // SSM 13.07.16 - вызов этого метода можно не добавлять
|
||||
}*/
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Отображение локальных в клонированные локальные
|
||||
|
|
@ -926,8 +927,9 @@ namespace SyntaxVisitors
|
|||
DeleteRedundantBeginEnds.Accept(pd);
|
||||
|
||||
// Обработка метода для корректного захвата локальных переменных и их типов
|
||||
//IEnumerable<var_def_statement> localsClonesCollection;
|
||||
//CreateLocalVariablesTypeProxies(pd, out localsClonesCollection);
|
||||
// - это уже не надо - иногда можно включать чтобы посмотреть, что собой представляет функция после Loweringа
|
||||
IEnumerable<var_def_statement> localsClonesCollection;
|
||||
CreateLocalVariablesTypeProxies(pd, out localsClonesCollection);
|
||||
|
||||
// frninja 16/11/15: перенес ниже чтобы работал захват для lowered for
|
||||
|
||||
|
|
|
|||
|
|
@ -30,6 +30,21 @@ namespace SyntaxVisitors
|
|||
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)
|
||||
{
|
||||
var lambdaSearcher = new TreeConverter.LambdaExpressions.LambdaSearcher(yn);
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ namespace YieldDesugarSyntaxTreeConverter
|
|||
root.visit(new ProcessYieldCapturedVarsVisitor());
|
||||
|
||||
#if DEBUG
|
||||
// root.visit(new SimplePrettyPrinterVisitor(@"d:\zzz.txt"));
|
||||
//root.visit(new SimplePrettyPrinterVisitor(@"d:\zzz.txt"));
|
||||
#endif
|
||||
|
||||
return root;
|
||||
|
|
|
|||
Binary file not shown.
Loading…
Reference in a new issue