Убран дурацкий код, из-за которого в BaseChangeVisitor все узлы обходились дважды.
Доработан LoweringVisitor, который ранее на это закладывался
This commit is contained in:
parent
ac0ce4b1be
commit
88cd8ce925
|
|
@ -15,7 +15,7 @@ begin
|
||||||
|
|
||||||
var q := a1.f(Range(1,4));
|
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));
|
||||||
Assert(q.Println.SequenceEqual(sq));
|
Assert(q.Println.SequenceEqual(sq));
|
||||||
end.
|
end.
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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.
Loading…
Reference in a new issue