void BindReferenceEquality(BinaryExpression node, bool inequality)
{
if (BindNullableOperation(node))
{
return;
}
//BOO-1174: accept `booleanExpression is true|false`
BoolLiteralExpression isBool = node.Right as BoolLiteralExpression;
if (null != isBool)
{
if (GetExpressionType(node.Left) == TypeSystemServices.BoolType)
{
Node replacement = (isBool.Value ^ inequality)
? node.Left
: new UnaryExpression(UnaryOperatorType.LogicalNot, node.Left);
node.ParentNode.Replace(node, replacement);
Visit(replacement);
return;
}
}
if (CheckIsNotValueType(node, node.Left) &&
CheckIsNotValueType(node, node.Right))
{
BindExpressionType(node, TypeSystemServices.BoolType);
}
else
{
Error(node);
}
}