public OperatorNotDefinedError(Type left, Type right, TigerOperator @operator, SourceLocation location)
     : base(location)
 {
     Left     = left;
     Right    = right;
     Operator = @operator;
 }
 public OperatorNotDefinedError(Type left, Type right, TigerOperator @operator, SourceLocation location)
     : base(location)
 {
     Left = left;
     Right = right;
     Operator = @operator;
 }
 public static bool IsOperation(this TigerOperator @operator)
 {
     return(new List <TigerOperator>
     {
         TigerOperator.Add,
         TigerOperator.Subtract,
         TigerOperator.Multiply,
         TigerOperator.Divide,
         TigerOperator.Mod,
         TigerOperator.Power
     }.Contains(@operator));
 }
 public static bool IsComparison(this TigerOperator @operator)
 {
     return(new List <TigerOperator>
     {
         TigerOperator.LessThan,
         TigerOperator.LessThanOrEqual,
         TigerOperator.GreaterThan,
         TigerOperator.GreaterThanOrEqual,
         TigerOperator.Equal,
         TigerOperator.NotEqual,
         TigerOperator.AndAlso,
         TigerOperator.OrElse,
         TigerOperator.ExclusiveOr
     }.Contains(@operator));
 }
        public static string ToSymbol(this TigerOperator @operator)
        {
            switch (@operator)
            {
            case TigerOperator.None:
                break;

            case TigerOperator.Not:
                return("not");

            case TigerOperator.Pos:
                return("Pos");

            case TigerOperator.Invert:
                return("Invert");

            case TigerOperator.Negate:
                return("Negate");

            case TigerOperator.Add:
                return("+");

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

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

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

            case TigerOperator.TrueDivide:
                return("TrueDivide");

            case TigerOperator.Mod:
                return("%");

            case TigerOperator.BitwiseAnd:
                return("BitwiseAnd");

            case TigerOperator.BitwiseOr:
                return("BitwiseOr");

            case TigerOperator.Xor:
                return("Xor");

            case TigerOperator.LeftShift:
                return("<<");

            case TigerOperator.RightShift:
                return(">>");

            case TigerOperator.Power:
                return("**");

            case TigerOperator.FloorDivide:
                return("FloorDivide");

            case TigerOperator.AndAlso:
                return("&");

            case TigerOperator.OrElse:
                return("|");

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

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

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

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

            case TigerOperator.Equal:
                return("=");

            case TigerOperator.NotEqual:
                return("<>");

            case TigerOperator.In:
                return("In");

            case TigerOperator.NotIn:
                return("NotIn");

            case TigerOperator.IsNot:
                return("IsNot");

            case TigerOperator.Is:
                return("Is");

            default:
                throw new ArgumentOutOfRangeException("operator");
            }
            throw new ArgumentOutOfRangeException("operator");
        }