protected override ScriptVariable CalculateInternal(ScriptExecutionEnvironment env)
        {
            ScriptVariable value = null;

            if (this.InitialValue != null)
            {
                value = this.InitialValue.Calculate(env);
            }
            env.Variables.Declare(this.Identifier, value, this.Property);
            return(value == null ? null : value.Clone());
        }
        protected override ScriptVariable CalculateInternal(ScriptExecutionEnvironment env)
        {
            ScriptVariable value = null;

            if (this.RightValue != null)
            {
                value = this.RightValue.Calculate(env);
            }
            IVariableAccessor access = this.Accessor.GetAccessor(env);

            if (this.Operator == OperatorType.Substitute)
            {
                access.Set(env, value == null ? null : value.Clone());
                return(value);
            }
            else
            {
                ScriptVariable leftValue   = access.Get(env);
                ScriptVariable returnValue = operate(leftValue, value, this.Operator);
                access.Set(env, returnValue);
                return(returnValue);
            }
        }