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); }