//------------------------------------------------------------------------------------------------------------------------------------------------- public void Do(Action <ILoopBody, Local <int> > body) { var counter = m_Writer.Local <int>(); ForStatement statement; if (m_Increment > 0) { statement = new ForStatement(() => counter.Assign(m_From)); statement.While(counter < m_To); } else if (m_Increment < 0) { statement = new ForStatement(() => counter.Assign(m_From - 1)); statement.While(counter >= m_To); } else { throw new ArgumentException("Increment cannot be zero."); } statement.Next(() => counter.Assign(counter + new Constant <int>(m_Increment))); statement.Do(loop => { body(loop, counter); }); StatementScope.Current.AddStatement(statement); }