Example #1
0
        public override Ast Reduce()
        {
            MSAst.ParameterExpression res = MakeParameter();

            // 1. Initialization code - create list and store it in the temp variable
            MSAst.Expression initialize =
                Ast.Assign(
                    res,
                    Ast.Call(Factory())
                    );

            // 2. Create body from LHS: res.Append(item), res.Add(key, value), etc.
            MSAst.Expression body = Body(res);

            // 3. Transform all iterators in reverse order, building the true bodies
            for (int current = Iterators.Count - 1; current >= 0; current--)
            {
                ComprehensionIterator iterator = Iterators[current];
                body = iterator.Transform(body);
            }

            return(Ast.Block(
                       new[] { res },
                       initialize,
                       body,
                       res
                       ));
        }
Example #2
0
            internal static PythonList Convert(ComprehensionIterator[] iters) {
                PythonList comps = new PythonList();
                int start = 1;
                for (int i = 0; i < iters.Length; i++) {
                    if (i == 0 || iters[i] is ComprehensionIf)
                        if (i == iters.Length - 1)
                            i++;
                        else
                            continue;

                    ComprehensionIf[] ifs = new ComprehensionIf[i - start];
                    Array.Copy(iters, start, ifs, 0, ifs.Length);
                    comps.Add(new comprehension((ComprehensionFor)iters[start - 1], ifs));
                    start = i + 1;
                }
                return comps;
            }
Example #3
0
 internal static PythonList Convert(IList<ComprehensionIterator> iters) {
     ComprehensionIterator[] iters2 = new ComprehensionIterator[iters.Count];
     iters.CopyTo(iters2, 0);
     return Convert(iters2);
 }
Example #4
0
 public ListComprehension(Expression item, ComprehensionIterator[] iterators) {
     _item = item;
     _iterators = iterators;
 }
Example #5
0
 public DictionaryComprehension(Expression key, Expression value, ComprehensionIterator[] iterators) {
     _key = key;
     _value = value;
     _iterators = iterators;
     _scope = new ComprehensionScope(this);
 }
Example #6
0
 public SetComprehension(Expression item, ComprehensionIterator[] iterators) {
     _item = item;
     _iterators = iterators;
     _scope = new ComprehensionScope(this);
 }
Example #7
0
            internal static PythonList Convert(ComprehensionIterator[] iters)
            {
                Generic.List<ComprehensionFor> cfCollector =
                    new Generic.List<ComprehensionFor>();
                Generic.List<Generic.List<ComprehensionIf>> cifCollector =
                    new Generic.List<Generic.List<ComprehensionIf>>();
                Generic.List<ComprehensionIf> cif = null;
                for (int i = 0; i < iters.Length; i++) {
                    if (iters[i] is ComprehensionFor) {
                        ComprehensionFor cf = (ComprehensionFor)iters[i];
                        cfCollector.Add(cf);
                        cif = new Generic.List<ComprehensionIf>();
                        cifCollector.Add(cif);
                    } else {
                        ComprehensionIf ci = (ComprehensionIf)iters[i];
                        cif.Add(ci);
                    }
                }

                PythonList comps = new PythonList();
                for (int i = 0; i < cfCollector.Count; i++)
                    comps.Add(new comprehension(cfCollector[i], cifCollector[i].ToArray()));
                return comps;
            }
Example #8
0
 public DictionaryComprehension(Expression key, Expression value, ComprehensionIterator[] iterators) {
     _key = key;
     _value = value;
     _iterators = iterators;
 }