This commit is contained in:
Ivan Bondarev 2024-06-09 12:30:20 +02:00
parent b844e02ff5
commit e5f60689cd
2 changed files with 20 additions and 2 deletions

View file

@ -113,13 +113,16 @@ namespace SyntaxVisitors
return;
}
var newNameCache = new Dictionary<string, string>();
var newLocalNames = var_def.vars.idents.Select(id =>
{
var low = id.name.ToLower();
var newName = this.CreateNewVariableName(low);
//BlockNamesStack[CurrentLevel].Add(low, newName);
BlockNamesStack[CurrentLevel][low] = newName;
//BlockNamesStack[CurrentLevel][low] = newName;
newNameCache[low] = newName;
return new ident(newName, id.source_context);
});
@ -130,6 +133,8 @@ namespace SyntaxVisitors
Replace(var_def, newVS);
listNodes[listNodes.Count - 1] = newVS; //SSM 8.11.18
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 - зачем обходить всё?
}

View file

@ -3,14 +3,27 @@
function f1: sequence of integer;
begin
//Ошибка: Ожидалось имя процедуры или функции
var v := 1;//V(0);
var v := V(0);
// Если закомментировать эту строчку - предыдущая строчка работает
yield v;
end;
function f2: sequence of integer;
begin
//Ошибка: Ожидалось имя процедуры или функции
var v := V(0);
var w := v + 1;
// Если закомментировать эту строчку - предыдущая строчка работает
yield w;
end;
begin
var i := 0;
foreach var j in f1 do
i := j;
assert(i = 1);
foreach var j in f2 do
i := j;
assert(i = 2);
end.