private TypedObject calculateBinaryExpression(BinaryExpression expression, BulletRecord record) { TypedObject left = calculate(expression.getLeft(), record); TypedObject right = calculate(expression.getRight(), record); Type resultType = getResultType(left.getType(), right.getType()); TypedObject castedLeft = left.forceCast(resultType); TypedObject castedRight = right.forceCast(resultType); TypedObject result = null; switch (expression.getOperation()) { case ADD: result = add(resultType, castedLeft, castedRight); break; case SUB: result = sub(resultType, castedLeft, castedRight); break; case MUL: result = mul(resultType, castedLeft, castedRight); break; case DIV: result = div(resultType, castedLeft, castedRight); break; } Type newType = expression.getType(); if (newType != null) { result = result.forceCast(newType); } return result; }