Пример #1
0
        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);
        }
Пример #2
0
 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);
     }
 }
Пример #3
0
 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");
 }
Пример #4
0
        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.
            // И вообще другой синтаксический сахар, размещённый в этом визиторе
        }
Пример #5
0
        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);
        }
Пример #7
0
        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 пустым?
        }
Пример #8
0
        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))));

            // еще - не заходить в лямбды
        }
Пример #9
0
 public virtual void visit(variable_definitions _variable_definitions)
 {
     DefaultVisit(_variable_definitions);
 }
Пример #10
0
		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);
		}
Пример #11
0
		public virtual void post_do_visit(variable_definitions _variable_definitions)
		{
		}
Пример #12
0
 public virtual void visit(variable_definitions _variable_definitions)
 {
 }
 public override void visit(variable_definitions _variable_definitions)
 {
     visit_collection(_variable_definitions.var_definitions);
 }
Пример #14
0
		public virtual void visit(variable_definitions _variable_definitions)
		{
		}
		public virtual void visit(variable_definitions _variable_definitions)
		{
			DefaultVisit(_variable_definitions);
		}
Пример #16
0
 public override void visit(variable_definitions _variable_definitions)
 {
     //text="Count: "+_variable_definitions.var_definitions.Count.ToString();
     get_count(_variable_definitions.var_definitions);
 }
Пример #17
0
		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);
		}