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)); }
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)); }
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()); } }
// Private Methods protected override IPyStatement VisitPyWhileStatement(PyWhileStatement node) { return(node.Simplify(this)); }