Exemplo n.º 1
0
        public Value Evaluate(ExecutionContext vm, LocalVariables lv)
        {
            var length = statements.Length;
            var result = new StringBuilder();

            for (var i = 0; i < length; i++)
            {
                if (Lexer.IsEvaluate(statements[i]))
                {
                    var expression = vm.Parser.MakeExpression(statements[i]);
                    result.Append(expression.Evaluate(vm, lv).ToString());
                }
                else
                {
                    result.Append(statements[i]);
                }
            }
            var index     = 0;
            var name      = result.ToString();
            var array     = Lexer.SplitArrayIndexer(name);
            var statement = array[0].Substring(1);

            if (LocalVariables.IsLocalVariable(name))
            {
                if (array.Length > 1)
                {
                    index = int.Parse(array[1]);
                    return(lv.GetVariable(statement)[index]);
                }
                return(lv.GetVariable(statement));
            }
            if (array.Length > 1)
            {
                index = int.Parse(array[1]);
                if (vm.Functions.IsFunction(statement))
                {
                    return(vm.Functions.ExecFunction(vm, statement)[index]);
                }
                else
                {
                    return(vm.Variables.GetVariable(statement)[index]);
                }
            }
            else
            {
                if (vm.Functions.IsFunction(statement))
                {
                    return(vm.Functions.ExecFunction(vm, statement));
                }
                else
                {
                    return(vm.Variables.GetVariable(statement));
                }
            }
        }