internal comprehension(ComprehensionFor listFor, ComprehensionIf[] listIfs) : this() { _target = Convert(listFor.Left, Store.Instance); _iter = Convert(listFor.List); _ifs = PythonOps.MakeEmptyList(listIfs.Length); foreach (ComprehensionIf listIf in listIfs) _ifs.Add(Convert(listIf.Test)); }
// list_for: 'for' target_list 'in' old_expression_list [list_iter] private ComprehensionFor ParseListCompFor() { Eat(TokenKind.KeywordFor); var start = GetStart(); bool trailingComma; List<Expression> l = ParseTargetList(out trailingComma); // expr list is something like: // () // a // a,b // a,b,c // we either want just () or a or we want (a,b) and (a,b,c) // so we can do tupleExpr.EmitSet() or loneExpr.EmitSet() Expression lhs = MakeTupleOrExpr(l, trailingComma); Eat(TokenKind.KeywordIn); Expression list = ParseOldExpressionListAsExpr(); ComprehensionFor ret = new ComprehensionFor(lhs, list); ret.SetLoc(_globalParent, start, GetEnd()); return ret; }
internal GeneratorExp(GeneratorExpression expr) : this() { ExtractListComprehensionIterators walker = new ExtractListComprehensionIterators(); expr.Function.Body.Walk(walker); ComprehensionIterator[] iters = walker.Iterators; Debug.Assert(iters.Length != 0, "A generator expression cannot have zero iterators."); iters[0] = new ComprehensionFor(((ComprehensionFor)iters[0]).Left, expr.Iterable); _elt = Convert(walker.Yield.Expression); _generators = Convert(iters); }
// ListComprehensionFor public override bool Walk(ComprehensionFor node) { node.Parent = _currentScope; node.Left.Walk(_define); return true; }
internal static ComprehensionIterator[] RevertComprehensions(PythonList comprehensions) { Generic.List<ComprehensionIterator> comprehensionIterators = new Generic.List<ComprehensionIterator>(); foreach (comprehension comp in comprehensions) { ComprehensionFor cf = new ComprehensionFor(expr.Revert(comp.target), expr.Revert(comp.iter)); comprehensionIterators.Add(cf); foreach (expr ifs in comp.ifs) { comprehensionIterators.Add(new ComprehensionIf(expr.Revert(ifs))); } } return comprehensionIterators.ToArray(); }
// ListComprehensionFor public override bool Walk(ComprehensionFor node) { node.Parent = _currentScope; node.Left.Walk(_define); return(true); }
public void Visit(PyAst.ComprehensionFor node) => throw CreateNotImplementedEx();