void BindEnumOperation(BinaryExpression node)
{
IType lhs = GetExpressionType(node.Left);
IType rhs = GetExpressionType(node.Right);
switch(node.Operator)
{
case BinaryOperatorType.Addition:
if (lhs.IsEnum != rhs.IsEnum)
{
BindExpressionType(node, lhs.IsEnum ? lhs : rhs);
return;
}
break;
case BinaryOperatorType.Subtraction:
if (lhs == rhs)
{
BindExpressionType(node, TypeSystemServices.IntType);
return;
}
else if (lhs.IsEnum && !rhs.IsEnum)
{
BindExpressionType(node, lhs);
return;
}
break;
case BinaryOperatorType.BitwiseAnd:
case BinaryOperatorType.BitwiseOr:
case BinaryOperatorType.ExclusiveOr:
if (lhs == rhs)
{
BindExpressionType(node, lhs);
return;
}
break;
}
if (!ResolveOperator(node))
{
InvalidOperatorForTypes(node);
}
}