示例#1
0
        /// <summary>
        /// Reverses the code, taking account float/double NaN comparisons
        /// </summary>
        private static AstCode ReverseCode(AstCode code, XTypeReference type)
        {
            bool isFlt = type.IsDouble() || type.IsFloat();

            if (!isFlt)
            {
                return(code.Reverse());
            }

            switch (code)
            {
            case AstCode.Ceq:
                return(AstCode.Cne);

            case AstCode.Cne:
                return(AstCode.Ceq);

            case AstCode.Cle:
                return(AstCode.Cgt_Un);

            case AstCode.Cle_Un:
                return(AstCode.Cgt);

            case AstCode.Clt:
                return(AstCode.Cge_Un);

            case AstCode.Clt_Un:
                return(AstCode.Cge);

            case AstCode.Cgt:
                return(AstCode.Cle_Un);

            case AstCode.Cgt_Un:
                return(AstCode.Cle);

            case AstCode.Cge:
                return(AstCode.Clt_Un);

            case AstCode.Cge_Un:
                return(AstCode.Clt);

            default:
                throw new ArgumentOutOfRangeException("code", code.ToString());
            }
        }
示例#2
0
        /// <summary>
        /// Reverses the code, taking account float/double NaN comparisons
        /// </summary>
        private static AstCode ReverseCode(AstCode code, XTypeReference type)
        {
            bool isFlt = type.IsDouble() || type.IsFloat();

            if (!isFlt)
                return code.Reverse();

            switch (code)
            {
                case AstCode.Ceq:
                    return AstCode.Cne;
                case AstCode.Cne:
                    return AstCode.Ceq;
                case AstCode.Cle:
                    return AstCode.Cgt_Un;
                case AstCode.Cle_Un:
                    return AstCode.Cgt;
                case AstCode.Clt:
                    return AstCode.Cge_Un;
                case AstCode.Clt_Un:
                    return AstCode.Cge;
                case AstCode.Cgt:
                    return AstCode.Cle_Un;
                case AstCode.Cgt_Un:
                    return AstCode.Cle;
                case AstCode.Cge:
                    return AstCode.Clt_Un;
                case AstCode.Cge_Un:
                    return AstCode.Clt;
                default:
                    throw new ArgumentOutOfRangeException("code", code.ToString());
            }            
        }