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); }