Inheritance: ComprehensionIterator
Beispiel #1
0
 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));
 }
Beispiel #2
0
        // 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;
        }
Beispiel #3
0
 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);
 }
Beispiel #4
0
 // ListComprehensionFor
 public override bool Walk(ComprehensionFor node)
 {
     node.Parent = _currentScope;
     node.Left.Walk(_define);
     return true;
 }
Beispiel #5
0
 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();
 }
Beispiel #6
0
 // ListComprehensionFor
 public override bool Walk(ComprehensionFor node)
 {
     node.Parent = _currentScope;
     node.Left.Walk(_define);
     return(true);
 }
 public void Visit(PyAst.ComprehensionFor node) => throw CreateNotImplementedEx();