public void Execute(TFunctionData stackFrame) { stackFrame.AssertParamCount(Template.ParameterCount); Executer exec = stackFrame.StackExecuter; exec.Context = exec.Context.CreateSubContext(); for (int index = 1; index < Template.ParameterCount; index++) { exec.Context.SetVariable(Template.GetParameter <string>(index), stackFrame.GetParameter(index)); } exec.Context.SetCommand("return", Return); exec.Context.SetFunction("SetStatus", SetStatus); stackFrame.CopyFrom(exec.Execute(Body)); exec.HonorBreak(); exec.Context = exec.Context.Collect(); }
public override void Execute(Executer exec) { TFunctionData parameters = new TFunctionData(exec, Header.Text); if (parameters.ParameterCount < 3) { throw ThrowHelper.NoCondition(); } StringSegment condition = new StringSegment(Header.Text, Header.Text.IndexOf(' ', 3)); if (parameters.GetParameter <string>(1).EqualsIgnoreCase("UNTIL")) { condition = new StringSegment(string.Format("NOT ({0})", condition)); // Until means inverted } else if (parameters.GetParameter <string>(1).EqualsIgnoreCase("WHILE")) { // don't do anything, you're golden } else { throw ThrowHelper.ExpectedToken("UNTIL' or 'WHILE"); } Evaluator eval = new Evaluator(condition, exec); do { exec.Execute(Body); if (exec.BreakRequest) { exec.HonorBreak(); break; } eval.ShouldParse = true; }while (eval.EvaluateBool()); }
public override void Execute(Executer exec) { TFunctionData parameters = new TFunctionData(exec, Header.Text); if (parameters.ParameterCount < 2) { throw ThrowHelper.NoCondition(); } StringSegment condition = new StringSegment(Header.Text, Header.Text.IndexOf(' ')); Evaluator eval = new Evaluator(condition, exec); while (eval.EvaluateBool()) { exec.Execute(Body); if (exec.BreakRequest) { exec.HonorBreak(); break; } eval.ShouldParse = true; } }