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 )); }
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; }
internal static PythonList Convert(IList<ComprehensionIterator> iters) { ComprehensionIterator[] iters2 = new ComprehensionIterator[iters.Count]; iters.CopyTo(iters2, 0); return Convert(iters2); }
public ListComprehension(Expression item, ComprehensionIterator[] iterators) { _item = item; _iterators = iterators; }
public DictionaryComprehension(Expression key, Expression value, ComprehensionIterator[] iterators) { _key = key; _value = value; _iterators = iterators; _scope = new ComprehensionScope(this); }
public SetComprehension(Expression item, ComprehensionIterator[] iterators) { _item = item; _iterators = iterators; _scope = new ComprehensionScope(this); }
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; }
public DictionaryComprehension(Expression key, Expression value, ComprehensionIterator[] iterators) { _key = key; _value = value; _iterators = iterators; }