private bool IsOperator(MethodInfo method)
{
return method.IsSpecialName &&
method.IsStatic &&
(method.Name == SpecialNames.ImplicitConversion ||
method.Name == SpecialNames.ExplicitConversion ||
// Binary Operators
method.Name == SpecialNames.CLR_Add ||
method.Name == SpecialNames.CLR_Subtract ||
method.Name == SpecialNames.CLR_Multiply ||
method.Name == SpecialNames.CLR_Division ||
method.Name == SpecialNames.CLR_Modulus ||
method.Name == SpecialNames.CLR_LShift ||
method.Name == SpecialNames.CLR_RShift ||
method.Name == SpecialNames.CLR_LT ||
method.Name == SpecialNames.CLR_GT ||
method.Name == SpecialNames.CLR_LTE ||
method.Name == SpecialNames.CLR_GTE ||
method.Name == SpecialNames.CLR_Equality ||
method.Name == SpecialNames.CLR_Inequality ||
method.Name == SpecialNames.CLR_BitwiseAnd ||
method.Name == SpecialNames.CLR_ExclusiveOr ||
method.Name == SpecialNames.CLR_BitwiseOr ||
method.Name == SpecialNames.CLR_LogicalNot ||
// Binary inplace operators.
method.Name == SpecialNames.CLR_InPlaceAdd ||
method.Name == SpecialNames.CLR_InPlaceSubtract ||
method.Name == SpecialNames.CLR_InPlaceMultiply ||
method.Name == SpecialNames.CLR_InPlaceDivide ||
method.Name == SpecialNames.CLR_InPlaceModulus ||
method.Name == SpecialNames.CLR_InPlaceBitwiseAnd ||
method.Name == SpecialNames.CLR_InPlaceExclusiveOr ||
method.Name == SpecialNames.CLR_InPlaceBitwiseOr ||
method.Name == SpecialNames.CLR_InPlaceLShift ||
method.Name == SpecialNames.CLR_InPlaceRShift ||
// Unary Operators
method.Name == SpecialNames.CLR_UnaryNegation ||
method.Name == SpecialNames.CLR_UnaryPlus ||
method.Name == SpecialNames.CLR_OnesComplement ||
method.Name == SpecialNames.CLR_True ||
method.Name == SpecialNames.CLR_False ||
method.Name == SpecialNames.CLR_PreIncrement ||
method.Name == SpecialNames.CLR_PostIncrement ||
method.Name == SpecialNames.CLR_PreDecrement ||
method.Name == SpecialNames.CLR_PostDecrement);
}
#endregion