Пример #1
0
        public override Object PerformOperation(Executer exec, Operator op, Object otherTerm)
        {
            if (op == null)
            {
                return(this);
            }

            if (op.InternalTokens == ".")
            {
                object oUnboxed = null;
                oUnboxed = this.Evaluate(exec).GetUnboxed(exec);

                if (otherTerm.GetType() == typeof(Method))
                {
                    Method func = (Method)otherTerm;
                    func.BelongsToObject = oUnboxed;
                    return(func.Evaluate(exec));
                }
                if (otherTerm.GetType() == typeof(Variable))
                {
                    Variable var = (Variable)otherTerm;
                    var.BelongsToObject = oUnboxed;
                    var.EvaluateToWrapper(exec);
                    return(var);
                }
                return(null);
            }

            if (op.IsSettingOperator)
            {
                this.EvaluateToWrapper(exec);

                if (!op.IsBinary)
                {
                    //TODO: ++ and -- operators
                    return(this);
                }

                Object oNewVal = otherTerm.Evaluate(exec);
                if (op.InternalTokens != "=")
                {
                    //for other than "=", we need to know the current value
                    string   sSubOp = op.InternalTokens.Substring(0, 1);
                    Operator subOp  = Parser.GetOperator(sSubOp);
                    this.PerformOperation(exec, op, oNewVal);
                    oNewVal = this;
                }
                this.ValueWrapper.Value = oNewVal.GetUnboxed(exec);

                return(oNewVal);
            }

            Object oEvaluated = this.Evaluate(exec);

            return(oEvaluated.PerformOperation(exec, op, otherTerm));
        }
Пример #2
0
        public override Object PerformOperation(Executer exec, Operator op, Object otherTerm)
        {
            if (op == null)
                return this;

            if (op.InternalTokens == ".")
            {
                object oUnboxed = null;
                oUnboxed = this.Evaluate(exec).GetUnboxed(exec);

                if (otherTerm.GetType() == typeof(Method))
                {
                    Method func = (Method)otherTerm;
                    func.BelongsToObject = oUnboxed;
                    return func.Evaluate(exec);
                }
                if (otherTerm.GetType() == typeof(Variable))
                {
                    Variable var = (Variable)otherTerm;
                    var.BelongsToObject = oUnboxed;
                    var.EvaluateToWrapper(exec);
                    return var;
                }
                return null;
            }

            if (op.IsSettingOperator)
            {
                this.EvaluateToWrapper(exec);

                if (!op.IsBinary)
                {
                    //TODO: ++ and -- operators
                    return this;
                }

                Object oNewVal = otherTerm.Evaluate(exec);
                if (op.InternalTokens!="=")
                {
                    //for other than "=", we need to know the current value
                    string sSubOp = op.InternalTokens.Substring(0,1);
                    Operator subOp = Parser.GetOperator(sSubOp);
                    this.PerformOperation(exec, op, oNewVal);
                    oNewVal = this;
                }
                this.ValueWrapper.Value = oNewVal.GetUnboxed(exec);

                return oNewVal;
            }

            Object oEvaluated = this.Evaluate(exec);
            return oEvaluated.PerformOperation(exec, op, otherTerm);
        }