Scorpio.Runtime.ScriptContext.ParseOperate C# (CSharp) Method

ParseOperate() private method

private ParseOperate ( CodeOperator operate ) : ScriptObject
operate Scorpio.CodeDom.CodeOperator
return Scorpio.ScriptObject
        ScriptObject ParseOperate(CodeOperator operate)
        {
            TokenType type = operate.Operator;
            ScriptObject left = ResolveOperand(operate.Left);
            switch (type) {
            case TokenType.Plus:
                ScriptObject right = ResolveOperand(operate.Right);
                if (left is ScriptString || right is ScriptString) {
                    return new ScriptString(m_script, left.ToString() + right.ToString());
                }
                return left.Compute(type, right);
            case TokenType.Minus:
            case TokenType.Multiply:
            case TokenType.Divide:
            case TokenType.Modulo:
            case TokenType.InclusiveOr:
            case TokenType.Combine:
            case TokenType.XOR:
            case TokenType.Shr:
            case TokenType.Shi:
                return left.Compute(type, ResolveOperand(operate.Right));
            case TokenType.And:
                if (!left.LogicOperation()) return m_script.False;
                return m_script.CreateBool(ResolveOperand(operate.Right).LogicOperation());
            case TokenType.Or:
                if (left.LogicOperation()) return m_script.True;
                return m_script.CreateBool(ResolveOperand(operate.Right).LogicOperation());
            case TokenType.Equal:
                return m_script.CreateBool(left.Equals(ResolveOperand(operate.Right)));
            case TokenType.NotEqual:
                return m_script.CreateBool(!left.Equals(ResolveOperand(operate.Right)));
            case TokenType.Greater:
            case TokenType.GreaterOrEqual:
            case TokenType.Less:
            case TokenType.LessOrEqual:
                return m_script.CreateBool(left.Compare(type, ResolveOperand(operate.Right)));
            default:
                throw new ExecutionException(m_script, "不支持的运算符 " + type);
            }
        }
        ScriptObject ParseTernary(CodeTernary ternary)