public override void visit(variable_definitions vd) { if (vd.var_definitions.Any(vds => vds.vars.idents.Any(id => id.name.StartsWith("$")))) { return; } ++CurrentLevel; if (BlockNamesStack.Count <= CurrentLevel) { // Создаем отображение для имен текущего уровня вложенности мини-пространства имен BlockNamesStack.Add(new Dictionary <string, string>()); } var newVD = new variable_definitions( vd.var_definitions.Select(vds => { var newLocalNames = vds.vars.idents.Select(id => { var newName = this.CreateNewVariableName(id.name); BlockNamesStack[CurrentLevel].Add(id.name, newName); return(new ident(newName, id.source_context)); }); return(new var_def_statement(new ident_list(newLocalNames.ToArray()), vds.vars_type, vds.inital_value)); }).ToList(), vd.source_context); Replace(vd, newVD); base.visit(newVD); }
public override void visit(variable_definitions _variable_definitions) { AddPossibleComments(_variable_definitions, true, false); foreach (var_def_statement vds in _variable_definitions.var_definitions) { vds.visit(this); } }
public override void visit(variable_definitions _variable_definitions) { //for(int i=0;i<_variable_definitions.var_definitions.Count;i++) //{ // var_def_statement vdf=_variable_definitions.var_definitions[i]; // prepare_node(vdf,"var_definitions["+i.ToString()+"]"); //} prepare_collection(_variable_definitions.var_definitions, "var_definitions"); }
public override void visit(assign_var_tuple assvartup) { var tname = "#temp_var" + UniqueNumStr(); if (assvartup.Parent is declarations ds) // А когда это происходит??? { var ld = new List <declaration>(); ld.Add(new semantic_check_sugared_statement_node(typeof(assign_var_tuple), new List <syntax_tree_node> { assvartup.idents, assvartup.expr }, assvartup.source_context)); // Это нужно для проверок на этапе преобразования в семантику var vd = new variable_definitions(); var tt1 = new var_def_statement(new ident(tname, assvartup.expr.source_context), assvartup.expr, assvartup.expr.source_context); vd.Add(tt1); var nn = assvartup.idents.idents.Count(); for (var i = 0; i < nn; i++) { var a = new var_def_statement(assvartup.idents.idents[i], //new dot_node(new ident(tname), new ident("Item" + (i + 1).ToString())), new semantic_ith_element_of(new ident(tname, assvartup.expr.source_context), new int32_const(i), assvartup.expr.source_context), assvartup.idents.idents[i].source_context); vd.Add(a); } ld.Add(vd); ReplaceAssignVarTupleUsingParent(assvartup, ld); visit(assvartup.expr); return; } var sl = new List <statement>(); sl.Add(new semantic_check_sugared_statement_node(typeof(assign_var_tuple), new List <syntax_tree_node> { assvartup.idents, assvartup.expr }, assvartup.source_context)); // Это нужно для проверок на этапе преобразования в семантику var tt = new var_statement(new ident(tname, assvartup.expr.source_context), assvartup.expr, assvartup.expr.source_context); // тут для assvartup.expr внутри повторно вызывается convert_strong, это плохо, но если там лямбда, то иначе - с semantic_addr_value - не работает!!! sl.Add(tt); // он же помещается в новое синтаксическое дерево var n = assvartup.idents.idents.Count(); for (var i = 0; i < n; i++) { var sc = assvartup.idents.idents[i].source_context; var a = new var_statement(assvartup.idents.idents[i], //new dot_node(new ident(tname), new ident("Item" + (i + 1).ToString(),sc)), new semantic_ith_element_of(new ident(tname, assvartup.expr.source_context), new int32_const(i, sc), assvartup.expr.source_context), sc); //a.source_context = assvartup.idents.idents[i].source_context; sl.Add(a); } ReplaceStatementUsingParent(assvartup, sl); visit(assvartup.expr); // В assvartup.expr могут содержаться лямбды, в которых будут другие assign_var_tuple. // И вообще другой синтаксический сахар, размещённый в этом визиторе }
public override void visit(variable_definitions vd) { foreach (var v in vd.list) { LocalDeletedDefs.Insert(0, v); } // еще - не заходить в лямбды }
public override void visit(variable_definitions vd) { foreach (var id in vd.var_definitions.SelectMany(vds => vds.vars.idents)) { CheckVariableAlreadyDefined(id); UpperBlockNames.Add(id.name); } base.visit(vd); }
public override void visit(variable_definitions vd) { foreach (var v in vd.list) { LocalDeletedDefs.Add(v); LocalDeletedDefsNames.UnionWith(v.vars.idents.Select(id => id.name)); } var d = UpperNodeAs <declarations>(); d.defs.Remove(vd); // может ли остаться список declarations пустым? }
public override void visit(variable_definitions vd) // описания до begin { foreach (var v in vd.list) { LocalDeletedVD.Insert(0, v); //.Add(v); LocalDeletedDefsNames.UnionWith(v.vars.idents.Select(id => id.name)); } var d = UpperNodeAs <declarations>(); d.defs.Remove(vd); // может ли остаться список declarations пустым? // frninja 03/03/16 - переносим объявления переменных c initial_value в тело метода для дальнейшей обработки var methodBody = UpperTo <block>().program_code; methodBody.list.InsertRange(0, vd.list .Where(vds => (object)vds.inital_value != null) .SelectMany(vdsInit => vdsInit.vars.list.Select(id => new assign(id, vdsInit.inital_value)))); // еще - не заходить в лямбды }
public virtual void visit(variable_definitions _variable_definitions) { DefaultVisit(_variable_definitions); }
public override void visit(variable_definitions _variable_definitions) { DefaultVisit(_variable_definitions); pre_do_visit(_variable_definitions); for (int i = 0; i < var_definitions.Count; i++) visit(variable_definitions.var_definitions[i]); post_do_visit(_variable_definitions); }
public virtual void post_do_visit(variable_definitions _variable_definitions) { }
public virtual void visit(variable_definitions _variable_definitions) { }
public override void visit(variable_definitions _variable_definitions) { visit_collection(_variable_definitions.var_definitions); }
public override void visit(variable_definitions _variable_definitions) { //text="Count: "+_variable_definitions.var_definitions.Count.ToString(); get_count(_variable_definitions.var_definitions); }
public override void visit(variable_definitions _variable_definitions) { executer.visit(_variable_definitions); if (_variable_definitions.var_definitions != null) foreach (dynamic x in _variable_definitions.var_definitions) if(x != null) this.visit(x); if (_variable_definitions.attributes != null) this.visit((dynamic)_variable_definitions.attributes); }