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); }
public Value Next(int index) { if (generator.IsNone) { generator = value.Evaluate().IfCast <IGenerator>(); } return(generator.FlatMap(generator => generator.Next(index), () => NilValue)); }
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); }
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); } }
public override string ToString() => $"maybe {fieldName} = {expression} ({ifTrue}){ifFalse.FlatMap(f => $" ({f})", () => "")}";