示例#1
0
        protected ExpressionResult Assign(InstructionContext context, ExpressionResult result)
        {
            var left = Left as IdentifierExpression;

            if (left == null)
            {
                throw new ExpressionEvaluationException(this, "only identifiers can be assigned");
            }

            var store = context.GetStore(left.Variable);

            if (store != null)
            {
                switch (result.Type)
                {
                case ExpressionResultType.Boolean:
                    store.ChangeOrAdd(left.Variable.Name, result.Boolean);
                    break;

                case ExpressionResultType.Integer:
                    store.ChangeOrAdd(left.Variable.Name, result.Integer);
                    break;

                case ExpressionResultType.Number:
                    store.ChangeOrAdd(left.Variable.Name, result.Number);
                    break;
                }
            }
            else
            {
                throw new ExpressionEvaluationException(this, string.Format("unable to assign to variable {0}", left.Variable.Name));
            }

            return(result);
        }