This commit is contained in:
parent
b844e02ff5
commit
e5f60689cd
|
|
@ -113,13 +113,16 @@ namespace SyntaxVisitors
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var newNameCache = new Dictionary<string, string>();
|
||||||
|
|
||||||
var newLocalNames = var_def.vars.idents.Select(id =>
|
var newLocalNames = var_def.vars.idents.Select(id =>
|
||||||
{
|
{
|
||||||
var low = id.name.ToLower();
|
var low = id.name.ToLower();
|
||||||
|
|
||||||
var newName = this.CreateNewVariableName(low);
|
var newName = this.CreateNewVariableName(low);
|
||||||
//BlockNamesStack[CurrentLevel].Add(low, newName);
|
//BlockNamesStack[CurrentLevel].Add(low, newName);
|
||||||
BlockNamesStack[CurrentLevel][low] = newName;
|
//BlockNamesStack[CurrentLevel][low] = newName;
|
||||||
|
newNameCache[low] = newName;
|
||||||
return new ident(newName, id.source_context);
|
return new ident(newName, id.source_context);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -130,6 +133,8 @@ namespace SyntaxVisitors
|
||||||
Replace(var_def, newVS);
|
Replace(var_def, newVS);
|
||||||
listNodes[listNodes.Count - 1] = newVS; //SSM 8.11.18
|
listNodes[listNodes.Count - 1] = newVS; //SSM 8.11.18
|
||||||
ProcessNode(newVS.inital_value); // SSM 10.06.2020 #2103
|
ProcessNode(newVS.inital_value); // SSM 10.06.2020 #2103
|
||||||
|
foreach (var key in newNameCache.Keys)
|
||||||
|
BlockNamesStack[CurrentLevel][key] = newNameCache[key];
|
||||||
//base.visit(newVS); // SSM 10.06.2020 - зачем обходить всё?
|
//base.visit(newVS); // SSM 10.06.2020 - зачем обходить всё?
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,14 +3,27 @@
|
||||||
function f1: sequence of integer;
|
function f1: sequence of integer;
|
||||||
begin
|
begin
|
||||||
//Ошибка: Ожидалось имя процедуры или функции
|
//Ошибка: Ожидалось имя процедуры или функции
|
||||||
var v := 1;//V(0);
|
var v := V(0);
|
||||||
// Если закомментировать эту строчку - предыдущая строчка работает
|
// Если закомментировать эту строчку - предыдущая строчка работает
|
||||||
yield v;
|
yield v;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function f2: sequence of integer;
|
||||||
|
begin
|
||||||
|
//Ошибка: Ожидалось имя процедуры или функции
|
||||||
|
var v := V(0);
|
||||||
|
var w := v + 1;
|
||||||
|
// Если закомментировать эту строчку - предыдущая строчка работает
|
||||||
|
yield w;
|
||||||
|
end;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
var i := 0;
|
var i := 0;
|
||||||
foreach var j in f1 do
|
foreach var j in f1 do
|
||||||
i := j;
|
i := j;
|
||||||
assert(i = 1);
|
assert(i = 1);
|
||||||
|
|
||||||
|
foreach var j in f2 do
|
||||||
|
i := j;
|
||||||
|
assert(i = 2);
|
||||||
end.
|
end.
|
||||||
Loading…
Reference in a new issue