public Value Evaluate(ArrayYielder yielder) { var array = new Array(); foreach (Closure closure in yielder.Items) { Value value = closure.Evaluate(new Arguments()); if (value.Type == Value.ValueType.Nil) { return(array); } var skip = false; foreach (Item item in items) { var iterItem = new Array.IterItem { Value = value, Key = Array.GetKey(), Index = array.Length }; value = item.Process(iterItem, array.Length); if (value == null || value.Type == Value.ValueType.Nil) { skip = true; break; } } if (!skip) { array.Add(value); } } return(array); }
public override Value Process(Array.IterItem item, int length) { using (var assistant = new ParameterAssistant(parameterBlock)) { Block block = assistant.Block(); assistant.ArrayParameters(); assistant.SetParameterValues(item); return(block.Evaluate().IsTrue ? item.Value : null); } }
public override Value Process(Array.IterItem item, int length) { signal = SignalType.None; using (var assistant = new ParameterAssistant(parameterBlock)) { var block = assistant.Block(); assistant.ArrayParameters(); assistant.SetParameterValues(item); var value = block.Evaluate(); signal = Signal(); return(value); } }
public Value Evaluate(ArrayStream stream) { var array = new Array(); while (array.Length < stream.Limit) { Value value = stream.Next(); if (value.Type == Value.ValueType.Nil) { return(array); } var skip = false; foreach (Item item in items) { var iterItem = new Array.IterItem { Value = value, Key = Array.GetKey(), Index = array.Length }; value = item.Process(iterItem, array.Length); if (value == null || value.Type == Value.ValueType.Nil) { /* if (item.IsTerminating) * return array;*/ skip = true; break; } } if (!skip) { array.Add(value); } } return(array); }
public override Value Process(Array.IterItem item, int length) { return(length < limit ? item.Value : null); }
public abstract Value Process(Array.IterItem item, int length);