Beispiel #1
0
        //-------------------------------------------------------------------------------------------------------------------------------------------------

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