示例#1
0
        public override Object Visit(ForStatement node, Object obj)
        {
            for (int i = 0; i < node.InitializerCount; i++)
            {
                node.GetInitializerElement(i).Accept(this, obj);
            }

            for (int i = 0; i < node.AfterInit.Count; i++)
            {
                node.AfterInit[i].Accept(this, obj);
            }

            for (int i = 0; i < node.BeforeCondition.Count; i++)
            {
                node.BeforeCondition[i].Accept(this, obj);
            }

            node.Condition.Accept(this, obj);
            for (int i = 0; i < node.AfterCondition.Count; i++)
            {
                node.AfterCondition[i].Accept(this, obj);
            }

            node.Statements.Accept(this, obj);

            for (int i = 0; i < node.IteratorCount; i++)
            {
                node.GetIteratorElement(i).Accept(this, obj);
            }

            return(null);
        }
示例#2
0
        public override Object Visit(ForStatement node, Object obj)
        {
            int indent = Convert.ToInt32(obj);

            this.printIndentation(indent);
            this.output.WriteLine("ForStatement [{0}:{1}]", node.Location.Line, node.Location.Column);
            this.printIndentation(indent + 1);
            this.output.WriteLine("Initialization");
            for (int i = 0; i < node.InitializerCount; i++)
            {
                node.GetInitializerElement(i).Accept(this, indent + 2);
            }
            this.printIndentation(indent + 1);
            this.output.WriteLine("After initialization");
            for (int i = 0; i < node.AfterInit.Count; i++)
            {
                node.AfterInit[i].Accept(this, indent + 2);
            }
            this.printIndentation(indent + 1);
            this.output.WriteLine("Before condition");
            for (int i = 0; i < node.BeforeCondition.Count; i++)
            {
                node.BeforeCondition[i].Accept(this, indent + 2);
            }
            this.printIndentation(indent + 1);
            this.output.WriteLine("Condition");
            node.Condition.Accept(this, indent + 2);

            this.printIndentation(indent + 1);
            this.output.WriteLine("After condition");
            for (int i = 0; i < node.AfterCondition.Count; i++)
            {
                node.AfterCondition[i].Accept(this, indent + 2);
            }
            this.printIndentation(indent + 1);
            this.output.WriteLine("Statements");
            node.Statements.Accept(this, indent + 2);

            this.printIndentation(indent + 1);
            this.output.WriteLine("Iterators");
            for (int i = 0; i < node.IteratorCount; i++)
            {
                node.GetIteratorElement(i).Accept(this, indent + 2);
            }

            return(null);
        }
示例#3
0
        public override Object Visit(ForStatement node, Object obj)
        {
            List <Statement> initializer = new List <Statement>();

            for (int i = 0; i < node.InitializerCount; i++)
            {
                initializer.Add((Statement)node.GetInitializerElement(i).Accept(this, obj));
            }
            List <MoveStatement> afterInit = new List <MoveStatement>();

            for (int i = 0; i < node.AfterInit.Count; i++)
            {
                afterInit.Add((MoveStatement)node.AfterInit[i].Accept(this, obj));
            }
            List <ThetaStatement> beforeCondition = new List <ThetaStatement>();

            for (int i = 0; i < node.BeforeCondition.Count; i++)
            {
                beforeCondition.Add((ThetaStatement)node.BeforeCondition[i].Accept(this, obj));
            }
            Expression           condition      = (Expression)node.Condition.Accept(this, obj);
            List <MoveStatement> afterCondition = new List <MoveStatement>();

            for (int i = 0; i < node.AfterCondition.Count; i++)
            {
                afterCondition.Add((MoveStatement)node.AfterCondition[i].Accept(this, obj));
            }
            Statement        statements = (Statement)node.Statements.Accept(this, obj);
            List <Statement> iterator   = new List <Statement>();

            for (int i = 0; i < node.IteratorCount; i++)
            {
                iterator.Add((Statement)node.GetIteratorElement(i).Accept(this, obj));
            }

            ForStatement forStatement = new ForStatement(initializer, condition, iterator, statements, node.Location);

            forStatement.AfterInit       = afterInit;
            forStatement.BeforeCondition = beforeCondition;
            forStatement.AfterCondition  = afterCondition;

            return(forStatement);
        }
示例#4
0
        public override Object Visit(ForStatement node, Object obj)
        {
            Object aux = null;

            this.map.SetScope();
            for (int i = 0; i < node.InitializerCount; i++)
            {
                node.GetInitializerElement(i).Accept(this, false);
            }
            SSAMap map1 = this.map.Clone();

            if ((aux = node.Condition.Accept(this, false)) is SingleIdentifierExpression)
            {
                node.Condition = (SingleIdentifierExpression)aux;
            }
            SSAMap map2 = this.map.Clone();

            node.Statements.Accept(this, obj);
            SSAMap map3 = this.map.Clone();

            for (int i = 0; i < node.IteratorCount; i++)
            {
                node.GetIteratorElement(i).Accept(this, false);
            }
            // map4 = this.map

            List <MoveStatement> mvSt = map1.GetMoveStatements(this.map, node.Location.FileName, node.Location.Line);

            if (mvSt.Count != 0)
            {
                node.AfterInit = mvSt;
            }

            List <ThetaStatement> thSt = map1.GetThetaStatements(map2, ref this.map, node.Location.FileName, node.Location.Line);

            if (thSt.Count != 0)
            {
                node.BeforeCondition = thSt;
            }

            mvSt = map1.GetMoveStatements(map2, this.map, node.Location.FileName, node.Location.Line);
            if (mvSt.Count != 0)
            {
                node.AfterCondition = mvSt;
            }

            SSAInfo info = new SSAInfo(null, null, map1, this.map);

            node.Condition.Accept(new VisitorSSA2(), info);

            info = new SSAInfo(this.map, null, map1, this.map);
            node.Statements.Accept(new VisitorSSA2(), info);

            info = new SSAInfo(this.map, null, map1, this.map);
            for (int i = 0; i < node.IteratorCount; i++)
            {
                node.GetIteratorElement(i).Accept(new VisitorSSA2(), info);
            }

            this.addLocalVariable(this.map.ResetScope(), node.AuxInitializer);
            node.UpdateInitializer();

            return(null);
        }
        public override Object Visit(ForStatement node, Object obj)
        {
            if (node.Location == ((AstNode)obj).Location || found)
            {
                found = true;
                return(this.table);
            }

            this.table.Set();
            for (int i = 0; i < node.InitializerCount; i++)
            {
                if (found)
                {
                    return(this.table);
                }
                node.GetInitializerElement(i).Accept(this, obj);
            }
            for (int i = 0; i < node.AfterInit.Count; i++)
            {
                if (found)
                {
                    return(this.table);
                }
                node.AfterInit[i].Accept(this, obj);
            }
            for (int i = 0; i < node.BeforeCondition.Count; i++)
            {
                if (found)
                {
                    return(this.table);
                }
                node.BeforeCondition[i].Accept(this, obj);
            }
            if (found)
            {
                return(this.table);
            }
            node.Condition.Accept(this, obj);
            if (found)
            {
                return(this.table);
            }
            for (int i = 0; i < node.AfterCondition.Count; i++)
            {
                if (found)
                {
                    return(this.table);
                }
                node.AfterCondition[i].Accept(this, obj);
            }
            if (found)
            {
                return(this.table);
            }
            node.Statements.Accept(this, obj);
            if (found)
            {
                return(this.table);
            }
            for (int i = 0; i < node.IteratorCount; i++)
            {
                if (found)
                {
                    return(this.table);
                }
                node.GetIteratorElement(i).Accept(this, obj);
            }
            if (found)
            {
                return(this.table);
            }
            this.table.Reset();
            return(this.table);
        }