Example #1
0
        protected override IPyStatement[] VisitWhileStatement(WhileStatement src)
        {
            var c = TransValue(src.Condition);
            var s = this.TranslateStatementOne(src.Statement);
            var a = new PyWhileStatement(c, s);

            return(MkArray(a));
        }
Example #2
0
 protected virtual T VisitPyWhileStatement(PyWhileStatement node)
 {
     if (ThrowNotImplementedException)
     {
         throw new NotImplementedException(string.Format("Method {0} is not supported in class {1}", "VisitPyWhileStatement", this.GetType().FullName));
     }
     return(default(T));
 }
Example #3
0
        public IPyStatement[] Translate(ForStatement src)
        {
            var condition      = _translator.TransValue(src.Condition);
            var statement      = _translator.TranslateStatementOne(src.Statement);
            var incrementors   = _translator.TranslateStatements(src.Incrementors);
            var declarations   = _translator.TranslateStatement(src.Declaration).ToArray();
            var pyDeclarations = new List <PyAssignExpression>();

            foreach (object declaration in declarations)
            {
                var d = declaration;
                if (declaration is PyExpressionStatement)
                {
                    d = (declaration as PyExpressionStatement).Expression;
                }
                if (d is PyAssignExpression)
                {
                    pyDeclarations.Add(d as PyAssignExpression);
                }
                else
                {
                    throw new NotSupportedException();
                }
            }

            var pyDeclarationsA = pyDeclarations.ToArray();
            var candidate       = TrySimpleForLoop(pyDeclarationsA, incrementors, condition, statement);

            if (candidate != null)
            {
                return(candidate);
            }
            // convert to while loop
            {
                var s = new List <IPyStatement>();
                foreach (var i in pyDeclarationsA)
                {
                    s.Add(new PyExpressionStatement(i));
                }

                var block = new PyCodeBlock();
                block.Statements.Add(statement);
                foreach (var i in incrementors)
                {
                    block.Statements.Add(i);
                }

                var wl = new PyWhileStatement(condition, block);
                s.Add(wl);
                return(s.ToArray());
            }
        }
Example #4
0
        // Private Methods 

        protected override IPyStatement VisitPyWhileStatement(PyWhileStatement node)
        {
            return(node.Simplify(this));
        }