public override object Invoke(CSharpResolver resolver, object lhs, object rhs)
{
if (lhs == null && rhs == null)
{
return(!Negate); // ==: true; !=: false
}
if (lhs == null || rhs == null)
{
return(Negate); // ==: false; !=: true
}
lhs = resolver.CSharpPrimitiveCast(Type, lhs);
rhs = resolver.CSharpPrimitiveCast(Type, rhs);
bool equal;
if (Type == TypeCode.Single)
{
equal = (float)lhs == (float)rhs;
}
else if (Type == TypeCode.Double)
{
equal = (double)lhs == (double)rhs;
}
else
{
equal = object.Equals(lhs, rhs);
}
return(equal ^ Negate);
}