public bool CombineGeneratorWithIterator(Generator generator, IDynamic other) { var iterable = other.ConvertToObject(); var createIterator = iterable.Get("createIterator") as ICallable; if (createIterator == null) { throw CreateTypeError(""); } var iterator = createIterator.Call(this, iterable, EmptyArgs).ConvertToObject(); if (!iterator.HasProperty("current")) { throw CreateTypeError(""); } var next = iterator.Get("next") as ICallable; if (next == null) { throw CreateTypeError(""); } GeneratorStep step = null; step = (_e, _g) => { if (!next.Call(this, Undefined, EmptyArgs).ConvertToBoolean().BaseValue) { return(false); } generator.Current = iterator.Get("current"); generator.Steps.Enqueue(step); return(true); }; return(step(this, generator)); }
public void AddStep(GeneratorStep step) { if (!Steps.Contains(step)) { Steps.Add(step); } }