Example #1
0
 private Object EvaluateBinaryOperation(Object left, Object right, BinaryOp.OpType type)
 {
     if (left.GetType() != right.GetType())
     {
         return(new Error($@"
             Unsupported different types in {type} operation
             left side is a: {left.GetType()}
             right side is a: {right.GetType()}
         "));
     }
     if (left.GetType() == Number.Name && right.GetType() == Number.Name)
     {
         return(EvaluateNumberOp(left as Number, right as Number, type));
     }
     return(Null.NULL);
 }
Example #2
0
    private Object EvaluateNumberOp(Number left, Number right, BinaryOp.OpType type)
    {
        switch (type)
        {
        case BinaryOp.OpType.Add:
            return(new Number(left.value + right.value));

        case BinaryOp.OpType.Subtract:
            return(new Number(left.value - right.value));

        case BinaryOp.OpType.Divide:
            return(new Number(left.value / right.value));

        case BinaryOp.OpType.Power:
            return(new Number(Math.Pow(left.value, right.value)));

        case BinaryOp.OpType.Multiply:
            return(new Number(left.value * right.value));

        case BinaryOp.OpType.Modulo:
            return(new Number(left.value % right.value));

        case BinaryOp.OpType.Equal:
            return(Boolean.FromBool(left.value == right.value));

        case BinaryOp.OpType.GreaterThan:
            return(Boolean.FromBool(left.value > right.value));

        case BinaryOp.OpType.GreaterOrEqual:
            return(Boolean.FromBool(left.value >= right.value));

        case BinaryOp.OpType.LessThan:
            return(Boolean.FromBool(left.value < right.value));

        case BinaryOp.OpType.LessOrEqual:
            return(Boolean.FromBool(left.value <= right.value));

        case BinaryOp.OpType.NotEqual:
            return(Boolean.FromBool(left.value != right.value));

        default:
            return(new Error($"unsupported operation with numbers: {type}. Consider doing a type transformation"));
        }
    }