Exemplo n.º 1
0
        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();
        }
Exemplo n.º 2
0
        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());
        }
Exemplo n.º 3
0
        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;
            }
        }