Exemplo n.º 1
0
        private static IntValue EvaluateBinaryOperation(BinaryOperator oper, IntValue left, IntValue right)
        {
            switch (oper)
            {
            case BinaryOperator.Mult:
                return(new IntValue(checked (left.Value * right.Value)));

            case BinaryOperator.Div:
                return(new IntValue(left.Value / right.Value));

            case BinaryOperator.Modulo:
                return(new IntValue(left.Value % right.Value));

            case BinaryOperator.Add:
                return(new IntValue(checked (left.Value + right.Value)));

            case BinaryOperator.Sub:
                return(new IntValue(checked (left.Value - right.Value)));

            case BinaryOperator.ShiftLeft:
                return(new IntValue(checked ((int)left.Value << (int)right.Value)));

            case BinaryOperator.ShiftRight:
                return(new IntValue(checked ((int)left.Value >> (int)right.Value)));

            case BinaryOperator.Less:
                return(new IntValue(left.Value < right.Value ? 1 : 0));

            case BinaryOperator.Greater:
                return(new IntValue(left.Value > right.Value ? 1 : 0));

            case BinaryOperator.LessOrEqual:
                return(new IntValue(left.Value <= right.Value ? 1 : 0));

            case BinaryOperator.GreaterOrEqual:
                return(new IntValue(left.Value >= right.Value ? 1 : 0));

            case BinaryOperator.Equal:
                return(new IntValue(left.Value == right.Value ? 1 : 0));

            case BinaryOperator.NotEqual:
                return(new IntValue(left.Value != right.Value ? 1 : 0));

            case BinaryOperator.BinAnd:
                return(new IntValue(left.Value & right.Value));

            case BinaryOperator.BinOr:
                return(new IntValue(left.Value | right.Value));

            case BinaryOperator.LogAnd:
                return(new IntValue(left.Value != 0 && right.Value != 0 ? 1 : 0));

            case BinaryOperator.LogOr:
                return(new IntValue(left.Value != 0 || right.Value != 0 ? 1 : 0));

            default:
                throw new Exception();
            }
        }
Exemplo n.º 2
0
        private static NodeValue EvaluateBinaryOperation(BinaryOperator oper, StringValue left, IntValue right)
        {
            switch (oper)
            {
            case BinaryOperator.Mult:
                return(new StringValue(string.Concat(Enumerable.Repeat(left.Value, (int)right.Value))));

            default:
                throw new InvalidBinaryOperationException();
            }
        }