void ConvertEqualityToReferenceEqualityIfRequired(BinaryOperatorExpression binaryOperatorExpression)
{
// maybe we have to convert Equality operator to ReferenceEquality
ResolveResult left = resolver.ResolveInternal(binaryOperatorExpression.Left, ExpressionContext.Default);
ResolveResult right = resolver.ResolveInternal(binaryOperatorExpression.Right, ExpressionContext.Default);
if (left != null && right != null && left.ResolvedType != null && right.ResolvedType != null) {
IClass cLeft = left.ResolvedType.GetUnderlyingClass();
IClass cRight = right.ResolvedType.GetUnderlyingClass();
if (cLeft != null && cRight != null) {
if ((cLeft.ClassType != ClassType.Struct && cLeft.ClassType != ClassType.Enum)
|| (cRight.ClassType != ClassType.Struct && cRight.ClassType != ClassType.Enum))
{
// this is a reference comparison
if (cLeft.FullyQualifiedName != "System.String") {
// and it's not a string comparison, so we'll use reference equality
if (binaryOperatorExpression.Op == BinaryOperatorType.Equality) {
binaryOperatorExpression.Op = BinaryOperatorType.ReferenceEquality;
} else {
binaryOperatorExpression.Op = BinaryOperatorType.ReferenceInequality;
}
}
}
}
}
}