Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
 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);
     }
 }
Exemplo n.º 3
0
 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);
     }
 }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
 public override Value Process(Array.IterItem item, int length)
 {
     return(length < limit ? item.Value : null);
 }
Exemplo n.º 6
0
 public abstract Value Process(Array.IterItem item, int length);