Exemple #1
0
        public override Value Evaluate()
        {
            if (isTrue())
            {
                var verbResult = verb.Evaluate();
                result   = statement.FlatMap(s => s.Result, () => "");
                typeName = statement.FlatMap(s => s.TypeName, () => "");
                Index    = statement.FlatMap(s => s.Index, () => 0);
                return(verbResult);
            }

            return(null);
        }
Exemple #2
0
 public Value Next(int index)
 {
     if (generator.IsNone)
     {
         generator = value.Evaluate().IfCast <IGenerator>();
     }
     return(generator.FlatMap(generator => generator.Next(index), () => NilValue));
 }
Exemple #3
0
        public override Value Evaluate()
        {
            var value = expression.FlatMap(e => e.Evaluate().AssignmentValue(), () => new Nil());

            typeName           = value.Type.ToString();
            State.ReturnValue  = value;
            State.ReturnSignal = true;
            return(value);
        }
Exemple #4
0
        public Value Next(int index)
        {
            using (var popper = new SharedRegionPopper(region, this, "loop-range-next"))
            {
                popper.Push();
                if (index == 0)
                {
                    region.SetParameter(variable, init.Evaluate());
                }
                if (conditionFunc())
                {
                    var result = yielding.FlatMap(y => y.Evaluate(), () => region[variable]);
                    region[variable] = increment.Evaluate();
                    return(result);
                }

                return(NilValue);
            }
        }
Exemple #5
0
 public override string ToString() => $"maybe {fieldName} = {expression} ({ifTrue}){ifFalse.FlatMap(f => $" ({f})", () => "")}";