/// <summary>
        /// Return the provided operator as a <see cref="CodeBinaryOperatorType"/>
        /// </summary>
        /// <param name="op"></param>
        /// <returns></returns>
        /// <exception cref="ArgumentException">If there is no <see cref="CodeBinaryOperatorType"/> equivalent</exception>
        /// <exception cref="ArgumentOutOfRangeException"></exception>
        public static CodeBinaryOperatorType AsCodeBinaryOperatorType(this CodeBinaryOperatorTypeMore op)
        {
            switch (op)
            {
            case CodeBinaryOperatorTypeMore.Add:
            case CodeBinaryOperatorTypeMore.Subtract:
            case CodeBinaryOperatorTypeMore.Multiply:
            case CodeBinaryOperatorTypeMore.Divide:
            case CodeBinaryOperatorTypeMore.Modulus:
            case CodeBinaryOperatorTypeMore.Assign:
            case CodeBinaryOperatorTypeMore.IdentityInequality:
            case CodeBinaryOperatorTypeMore.IdentityEquality:
            case CodeBinaryOperatorTypeMore.ValueEquality:
            case CodeBinaryOperatorTypeMore.BitwiseOr:
            case CodeBinaryOperatorTypeMore.BitwiseAnd:
            case CodeBinaryOperatorTypeMore.BooleanOr:
            case CodeBinaryOperatorTypeMore.BooleanAnd:
            case CodeBinaryOperatorTypeMore.LessThan:
            case CodeBinaryOperatorTypeMore.LessThanOrEqual:
            case CodeBinaryOperatorTypeMore.GreaterThan:
            case CodeBinaryOperatorTypeMore.GreaterThanOrEqual:
                return((CodeBinaryOperatorType)op);

            case CodeBinaryOperatorTypeMore.LeftBitShift:
            case CodeBinaryOperatorTypeMore.RightBitShift:
            case CodeBinaryOperatorTypeMore.NullCoalescing:
            case CodeBinaryOperatorTypeMore.ValueInequality:
            case CodeBinaryOperatorTypeMore.BitwiseXOr:
                throw new ArgumentException();

            default:
                throw new ArgumentOutOfRangeException(nameof(op), op, null);
            }
        }
 /// <summary>
 /// Returns if the operator can be used as a shorthand operator
 /// </summary>
 /// <param name="op"></param>
 /// <returns></returns>
 public static bool CanBeShorthandOperator(this CodeBinaryOperatorTypeMore op)
 {
     return(op == CodeBinaryOperatorTypeMore.Add ||
            op == CodeBinaryOperatorTypeMore.Subtract ||
            op == CodeBinaryOperatorTypeMore.Multiply ||
            op == CodeBinaryOperatorTypeMore.Divide ||
            op == CodeBinaryOperatorTypeMore.Modulus ||
            op == CodeBinaryOperatorTypeMore.BitwiseAnd ||
            op == CodeBinaryOperatorTypeMore.BitwiseOr ||
            op == CodeBinaryOperatorTypeMore.BitwiseXOr ||
            op == CodeBinaryOperatorTypeMore.LeftBitShift ||
            op == CodeBinaryOperatorTypeMore.RightBitShift);
 }
 /// <summary>
 /// Constructor setting all values
 /// </summary>
 /// <param name="leftExpression"></param>
 /// <param name="operatorType"></param>
 /// <param name="rightExpression"></param>
 public CodeBinaryOperatorExpressionMore(CodeExpression leftExpression, CodeBinaryOperatorTypeMore operatorType, CodeExpression rightExpression)
 {
     LeftExpression  = leftExpression;
     RightExpression = rightExpression;
     OperatorType    = operatorType;
 }
 /// <summary>
 /// Returns the string for the provided operator if it can be used as a shorthand operator or null
 /// </summary>
 /// <param name="op"></param>
 /// <returns></returns>
 protected abstract string GetShorthandOperatorSymbol(CodeBinaryOperatorTypeMore op);
Пример #5
0
 /// <inheritdoc/>
 protected override string GetShorthandOperatorSymbol(CodeBinaryOperatorTypeMore op)
 {
     return(op.CanBeShorthandOperator() ? CSharpKeywordsUtils.OperatorSymbol(op) : null);
 }
        /// <summary>
        /// Returns the symbol for the provided operator
        /// </summary>
        /// <param name="operatorType"></param>
        /// <returns></returns>
        /// <exception cref="ArgumentOutOfRangeException"></exception>
        public static string OperatorSymbol(CodeBinaryOperatorTypeMore operatorType)
        {
            switch (operatorType)
            {
            case CodeBinaryOperatorTypeMore.Add:
                return("+");

            case CodeBinaryOperatorTypeMore.Subtract:
                return("-");

            case CodeBinaryOperatorTypeMore.Multiply:
                return("*");

            case CodeBinaryOperatorTypeMore.Divide:
                return("/");

            case CodeBinaryOperatorTypeMore.Modulus:
                return("Mod");

            case CodeBinaryOperatorTypeMore.Assign:
                return("=");

            case CodeBinaryOperatorTypeMore.IdentityInequality:
                return("IsNot");

            case CodeBinaryOperatorTypeMore.IdentityEquality:
                return("Is");

            case CodeBinaryOperatorTypeMore.ValueEquality:
                return("=");

            case CodeBinaryOperatorTypeMore.BitwiseOr:
                return("Or");

            case CodeBinaryOperatorTypeMore.BitwiseAnd:
                return("And");

            case CodeBinaryOperatorTypeMore.BooleanOr:
                return("OrElse");

            case CodeBinaryOperatorTypeMore.BooleanAnd:
                return("AndAlso");

            case CodeBinaryOperatorTypeMore.LessThan:
                return("<");

            case CodeBinaryOperatorTypeMore.LessThanOrEqual:
                return("<=");

            case CodeBinaryOperatorTypeMore.GreaterThan:
                return(">");

            case CodeBinaryOperatorTypeMore.GreaterThanOrEqual:
                return(">=");

            case CodeBinaryOperatorTypeMore.ValueInequality:
                return("<>");

            case CodeBinaryOperatorTypeMore.LeftBitShift:
                return("<<");

            case CodeBinaryOperatorTypeMore.RightBitShift:
                return(">>");

            case CodeBinaryOperatorTypeMore.BitwiseXOr:
                return("Xor");

            case CodeBinaryOperatorTypeMore.NullCoalescing:
            default:
                throw new ArgumentOutOfRangeException(nameof(operatorType), operatorType, null);
            }
        }