/// <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()); } }
/// <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()); } }